summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com>2023-07-05 20:41:31 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-07-05 20:41:31 +0000
commitb185bce3ef8fae85e02aba90b6f5e85d1a416276 (patch)
tree8821e5017456be1a8296f7e1dcdf443295fcbdd2
parent02b1dcf5c0b9bc1528488435b86e1c92996f644e (diff)
parent1a4ebace28218c144efee16403ce8f73776ae507 (diff)
downloaddevelopment-b185bce3ef8fae85e02aba90b6f5e85d1a416276.tar.gz
Merge "Ignore window manager dumps with no timestamp in timeline" into udc-dev am: 1a4ebace28
Original change: https://googleplex-android-review.googlesource.com/c/platform/development/+/23660823 Change-Id: I0a8020f22832efb9c97399bc33d5eeec017235b3 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--tools/winscope/src/app/components/timeline/mini_timeline_component.ts8
-rw-r--r--tools/winscope/src/app/components/timeline/timeline_component.ts6
-rw-r--r--tools/winscope/src/app/timeline_data.ts18
-rw-r--r--tools/winscope/src/app/timeline_data_test.ts14
4 files changed, 42 insertions, 4 deletions
diff --git a/tools/winscope/src/app/components/timeline/mini_timeline_component.ts b/tools/winscope/src/app/components/timeline/mini_timeline_component.ts
index 89230a3aa..2f11e1e1f 100644
--- a/tools/winscope/src/app/components/timeline/mini_timeline_component.ts
+++ b/tools/winscope/src/app/components/timeline/mini_timeline_component.ts
@@ -107,9 +107,11 @@ export class MiniTimelineComponent {
private getTracesToShow(): Traces {
const traces = new Traces();
- this.selectedTraces.forEach((type) => {
- traces.setTrace(type, assertDefined(this.timelineData.getTraces().getTrace(type)));
- });
+ this.selectedTraces
+ .filter((type) => this.timelineData.getTraces().getTrace(type) !== undefined)
+ .forEach((type) => {
+ traces.setTrace(type, assertDefined(this.timelineData.getTraces().getTrace(type)));
+ });
return traces;
}
diff --git a/tools/winscope/src/app/components/timeline/timeline_component.ts b/tools/winscope/src/app/components/timeline/timeline_component.ts
index 7d2f4301e..f6cbcbf00 100644
--- a/tools/winscope/src/app/components/timeline/timeline_component.ts
+++ b/tools/winscope/src/app/components/timeline/timeline_component.ts
@@ -476,6 +476,9 @@ export class TimelineComponent implements TracePositionUpdateListener {
if (!this.internalActiveTrace) {
return false;
}
+ if (this.timelineData.getTraces().getTrace(this.internalActiveTrace) === undefined) {
+ return false;
+ }
return this.timelineData.getPreviousEntryFor(this.internalActiveTrace) !== undefined;
}
@@ -483,6 +486,9 @@ export class TimelineComponent implements TracePositionUpdateListener {
if (!this.internalActiveTrace) {
return false;
}
+ if (this.timelineData.getTraces().getTrace(this.internalActiveTrace) === undefined) {
+ return false;
+ }
return this.timelineData.getNextEntryFor(this.internalActiveTrace) !== undefined;
}
diff --git a/tools/winscope/src/app/timeline_data.ts b/tools/winscope/src/app/timeline_data.ts
index ab9082b47..43699c3cf 100644
--- a/tools/winscope/src/app/timeline_data.ts
+++ b/tools/winscope/src/app/timeline_data.ts
@@ -30,6 +30,7 @@ export interface TimeRange {
from: Timestamp;
to: Timestamp;
}
+const INVALID_TIMESTAMP = 0n
export class TimelineData {
private traces = new Traces();
@@ -45,7 +46,21 @@ export class TimelineData {
initialize(traces: Traces, screenRecordingVideo: Blob | undefined) {
this.clear();
- this.traces = traces;
+ this.traces = new Traces();
+ traces.forEachTrace((trace, type) => {
+ if (type === TraceType.WINDOW_MANAGER) {
+ // Filter out WindowManager dumps with no timestamp from timeline
+ if (
+ trace.lengthEntries === 1 &&
+ trace.getEntry(0).getTimestamp().getValueNs() === INVALID_TIMESTAMP
+ ) {
+ return;
+ }
+ }
+
+ this.traces.setTrace(type, trace);
+ });
+
this.screenRecordingVideo = screenRecordingVideo;
this.firstEntry = this.findFirstEntry();
this.lastEntry = this.findLastEntry();
@@ -265,6 +280,7 @@ export class TimelineData {
private getFirstEntryOfActiveViewTraces(): TraceEntry<{}> | undefined {
const activeEntries = this.activeViewTraceTypes
+ .filter((it) => this.traces.getTrace(it) !== undefined)
.map((traceType) => assertDefined(this.traces.getTrace(traceType)))
.filter((trace) => trace.lengthEntries > 0)
.map((trace) => trace.getEntry(0))
diff --git a/tools/winscope/src/app/timeline_data_test.ts b/tools/winscope/src/app/timeline_data_test.ts
index 09ce03180..f752ddea1 100644
--- a/tools/winscope/src/app/timeline_data_test.ts
+++ b/tools/winscope/src/app/timeline_data_test.ts
@@ -59,6 +59,20 @@ describe('TimelineData', () => {
expect(timelineData.getCurrentPosition()).toBeDefined();
});
+ it('ignores dumps with no timestamp', () => {
+ expect(timelineData.getCurrentPosition()).toBeUndefined();
+
+ const traces = new TracesBuilder()
+ .setTimestamps(TraceType.SURFACE_FLINGER, [timestamp10, timestamp11])
+ .setTimestamps(TraceType.WINDOW_MANAGER, [new Timestamp(TimestampType.REAL, 0n)])
+ .build();
+
+ timelineData.initialize(traces, undefined);
+ expect(timelineData.getTraces().getTrace(TraceType.WINDOW_MANAGER)).toBeUndefined();
+ expect(timelineData.getFullTimeRange().from).toBe(timestamp10);
+ expect(timelineData.getFullTimeRange().to).toBe(timestamp11);
+ });
+
it('uses first entry by default', () => {
timelineData.initialize(traces, undefined);
expect(timelineData.getCurrentPosition()).toEqual(position10);