diff options
author | Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> | 2023-07-05 20:41:31 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2023-07-05 20:41:31 +0000 |
commit | b185bce3ef8fae85e02aba90b6f5e85d1a416276 (patch) | |
tree | 8821e5017456be1a8296f7e1dcdf443295fcbdd2 | |
parent | 02b1dcf5c0b9bc1528488435b86e1c92996f644e (diff) | |
parent | 1a4ebace28218c144efee16403ce8f73776ae507 (diff) | |
download | development-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>
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); |