aboutsummaryrefslogtreecommitdiff
path: root/ui
diff options
context:
space:
mode:
authorSteve Golton <stevegolton@google.com>2024-05-09 10:06:46 +0100
committerSteve Golton <stevegolton@google.com>2024-05-09 15:37:55 +0000
commit13503daf68a82a31413a1ed9c2e28ada766e2ed8 (patch)
tree61c8f1ca3283d0aa28ee870a5f8e54886f3cf519 /ui
parent52ec5ca6b4175792f1283a76b89570cf935c7119 (diff)
downloadperfetto-13503daf68a82a31413a1ed9c2e28ada766e2ed8.tar.gz
ui: Remove 7 circular imports within scroll jank plugin
Bug: 339637391 Change-Id: Ibb57dcc45288599706df681c05ffbbedfdd6be38
Diffstat (limited to 'ui')
-rw-r--r--ui/src/core_plugins/chrome_scroll_jank/chrome_tasks_scroll_jank_track.ts6
-rw-r--r--ui/src/core_plugins/chrome_scroll_jank/common.ts82
-rw-r--r--ui/src/core_plugins/chrome_scroll_jank/event_latency_details_panel.ts4
-rw-r--r--ui/src/core_plugins/chrome_scroll_jank/event_latency_track.ts20
-rw-r--r--ui/src/core_plugins/chrome_scroll_jank/index.ts77
-rw-r--r--ui/src/core_plugins/chrome_scroll_jank/scroll_details_panel.ts4
-rw-r--r--ui/src/core_plugins/chrome_scroll_jank/scroll_jank_slice.ts25
-rw-r--r--ui/src/core_plugins/chrome_scroll_jank/scroll_jank_v3_details_panel.ts8
-rw-r--r--ui/src/core_plugins/chrome_scroll_jank/scroll_jank_v3_track.ts17
-rw-r--r--ui/src/core_plugins/chrome_scroll_jank/scroll_track.ts6
10 files changed, 139 insertions, 110 deletions
diff --git a/ui/src/core_plugins/chrome_scroll_jank/chrome_tasks_scroll_jank_track.ts b/ui/src/core_plugins/chrome_scroll_jank/chrome_tasks_scroll_jank_track.ts
index c637994c0..a8273b48a 100644
--- a/ui/src/core_plugins/chrome_scroll_jank/chrome_tasks_scroll_jank_track.ts
+++ b/ui/src/core_plugins/chrome_scroll_jank/chrome_tasks_scroll_jank_track.ts
@@ -20,11 +20,7 @@ import {
import {NewTrackArgs} from '../../frontend/track';
import {Engine} from '../../trace_processor/engine';
import {NUM} from '../../trace_processor/query_result';
-
-import {
- ENABLE_CHROME_SCROLL_JANK_PLUGIN,
- ScrollJankTracks as DecideTracksResult,
-} from './index';
+import {DecideTracksResult, ENABLE_CHROME_SCROLL_JANK_PLUGIN} from './common';
interface ChromeTasksScrollJankTrackConfig {}
diff --git a/ui/src/core_plugins/chrome_scroll_jank/common.ts b/ui/src/core_plugins/chrome_scroll_jank/common.ts
new file mode 100644
index 000000000..8c20cc42b
--- /dev/null
+++ b/ui/src/core_plugins/chrome_scroll_jank/common.ts
@@ -0,0 +1,82 @@
+// Copyright (C) 2024 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+import {AddTrackArgs} from '../../common/actions';
+import {ObjectByKey} from '../../common/state';
+import {featureFlags} from '../../core/feature_flags';
+import {CustomSqlDetailsPanelConfig} from '../custom_sql_table_slices';
+
+export const SCROLL_JANK_GROUP_ID = 'chrome-scroll-jank-track-group';
+
+export const ENABLE_CHROME_SCROLL_JANK_PLUGIN = featureFlags.register({
+ id: 'enableChromeScrollJankPlugin',
+ name: 'Enable Chrome Scroll Jank plugin',
+ description: 'Adds new tracks for scroll jank in Chrome',
+ defaultValue: false,
+});
+
+export type DecideTracksResult = {
+ tracksToAdd: AddTrackArgs[];
+};
+
+export interface ScrollJankTrackSpec {
+ key: string;
+ sqlTableName: string;
+ detailsPanelConfig: CustomSqlDetailsPanelConfig;
+}
+
+// Global state for the scroll jank plugin.
+export class ScrollJankPluginState {
+ private static instance?: ScrollJankPluginState;
+ private tracks: ObjectByKey<ScrollJankTrackSpec>;
+
+ private constructor() {
+ this.tracks = {};
+ }
+
+ public static getInstance(): ScrollJankPluginState {
+ if (!ScrollJankPluginState.instance) {
+ ScrollJankPluginState.instance = new ScrollJankPluginState();
+ }
+
+ return ScrollJankPluginState.instance;
+ }
+
+ public registerTrack(args: {
+ kind: string;
+ trackKey: string;
+ tableName: string;
+ detailsPanelConfig: CustomSqlDetailsPanelConfig;
+ }): void {
+ this.tracks[args.kind] = {
+ key: args.trackKey,
+ sqlTableName: args.tableName,
+ detailsPanelConfig: args.detailsPanelConfig,
+ };
+ }
+
+ public unregisterTrack(kind: string): void {
+ delete this.tracks[kind];
+ }
+
+ public getTrack(kind: string): ScrollJankTrackSpec | undefined {
+ return this.tracks[kind];
+ }
+}
+
+export const ScrollJankV3TrackKind =
+ 'org.chromium.ScrollJank.scroll_jank_v3_track';
+
+export const CHROME_EVENT_LATENCY_TRACK_KIND =
+ 'org.chromium.ScrollJank.event_latencies';
diff --git a/ui/src/core_plugins/chrome_scroll_jank/event_latency_details_panel.ts b/ui/src/core_plugins/chrome_scroll_jank/event_latency_details_panel.ts
index 504080239..c081259ab 100644
--- a/ui/src/core_plugins/chrome_scroll_jank/event_latency_details_panel.ts
+++ b/ui/src/core_plugins/chrome_scroll_jank/event_latency_details_panel.ts
@@ -56,7 +56,7 @@ import {
getSliceForTrack,
ScrollJankSlice,
} from './scroll_jank_slice';
-import {ScrollJankV3Track} from './scroll_jank_v3_track';
+import {ScrollJankV3TrackKind} from './common';
// Given a node in the slice tree, return a path from root to it.
function getPath(slice: SliceTreeNode): string[] {
@@ -409,7 +409,7 @@ export class EventLatencySliceDetailsPanel extends BottomTab<GenericSliceDetails
left: this.jankySlice
? getSliceForTrack(
this.jankySlice,
- ScrollJankV3Track.kind,
+ ScrollJankV3TrackKind,
'Jank Interval',
)
: 'Jank Interval',
diff --git a/ui/src/core_plugins/chrome_scroll_jank/event_latency_track.ts b/ui/src/core_plugins/chrome_scroll_jank/event_latency_track.ts
index 11cc6d159..6d89daade 100644
--- a/ui/src/core_plugins/chrome_scroll_jank/event_latency_track.ts
+++ b/ui/src/core_plugins/chrome_scroll_jank/event_latency_track.ts
@@ -23,13 +23,14 @@ import {
} from '../custom_sql_table_slices';
import {EventLatencySliceDetailsPanel} from './event_latency_details_panel';
+import {JANK_COLOR} from './jank_colors';
+import {getLegacySelection} from '../../common/state';
import {
+ CHROME_EVENT_LATENCY_TRACK_KIND,
+ DecideTracksResult,
SCROLL_JANK_GROUP_ID,
ScrollJankPluginState,
- ScrollJankTracks as DecideTracksResult,
-} from './index';
-import {JANK_COLOR} from './jank_colors';
-import {getLegacySelection} from '../../common/state';
+} from './common';
export const JANKY_LATENCY_NAME = 'Janky EventLatency';
@@ -37,16 +38,11 @@ export interface EventLatencyTrackTypes extends NamedSliceTrackTypes {
config: {baseTable: string};
}
-const CHROME_EVENT_LATENCY_TRACK_KIND =
- 'org.chromium.ScrollJank.event_latencies';
-
export class EventLatencyTrack extends CustomSqlTableSliceTrack<EventLatencyTrackTypes> {
- static readonly kind = CHROME_EVENT_LATENCY_TRACK_KIND;
-
constructor(args: NewTrackArgs, private baseTable: string) {
super(args);
ScrollJankPluginState.getInstance().registerTrack({
- kind: EventLatencyTrack.kind,
+ kind: CHROME_EVENT_LATENCY_TRACK_KIND,
trackKey: this.trackKey,
tableName: this.tableName,
detailsPanelConfig: this.getDetailsPanel(),
@@ -55,7 +51,9 @@ export class EventLatencyTrack extends CustomSqlTableSliceTrack<EventLatencyTrac
async onDestroy(): Promise<void> {
await super.onDestroy();
- ScrollJankPluginState.getInstance().unregisterTrack(EventLatencyTrack.kind);
+ ScrollJankPluginState.getInstance().unregisterTrack(
+ CHROME_EVENT_LATENCY_TRACK_KIND,
+ );
}
getSqlSource(): string {
diff --git a/ui/src/core_plugins/chrome_scroll_jank/index.ts b/ui/src/core_plugins/chrome_scroll_jank/index.ts
index dc59118fb..1feb5cc47 100644
--- a/ui/src/core_plugins/chrome_scroll_jank/index.ts
+++ b/ui/src/core_plugins/chrome_scroll_jank/index.ts
@@ -14,9 +14,8 @@
import {v4 as uuidv4} from 'uuid';
-import {Actions, AddTrackArgs, DeferredAction} from '../../common/actions';
+import {Actions, DeferredAction} from '../../common/actions';
import {generateSqlWithInternalLayout} from '../../common/internal_layout_utils';
-import {ObjectByKey} from '../../common/state';
import {featureFlags} from '../../core/feature_flags';
import {GenericSliceDetailsTabConfig} from '../../frontend/generic_slice_details_tab';
import {
@@ -27,7 +26,6 @@ import {
PluginDescriptor,
} from '../../public';
import {Engine, EngineProxy} from '../../trace_processor/engine';
-import {CustomSqlDetailsPanelConfig} from '../custom_sql_table_slices';
import {ChromeTasksScrollJankTrack} from './chrome_tasks_scroll_jank_track';
import {EventLatencySliceDetailsPanel} from './event_latency_details_panel';
@@ -48,13 +46,13 @@ import {
CHROME_TOPLEVEL_SCROLLS_KIND,
TopLevelScrollTrack,
} from './scroll_track';
-
-export const ENABLE_CHROME_SCROLL_JANK_PLUGIN = featureFlags.register({
- id: 'enableChromeScrollJankPlugin',
- name: 'Enable Chrome Scroll Jank plugin',
- description: 'Adds new tracks for scroll jank in Chrome',
- defaultValue: false,
-});
+import {
+ ENABLE_CHROME_SCROLL_JANK_PLUGIN,
+ DecideTracksResult,
+ SCROLL_JANK_GROUP_ID,
+ ScrollJankV3TrackKind,
+ CHROME_EVENT_LATENCY_TRACK_KIND,
+} from './common';
export const ENABLE_SCROLL_JANK_PLUGIN_V2 = featureFlags.register({
id: 'enableScrollJankPluginV2',
@@ -63,66 +61,15 @@ export const ENABLE_SCROLL_JANK_PLUGIN_V2 = featureFlags.register({
defaultValue: false,
});
-export const SCROLL_JANK_GROUP_ID = 'chrome-scroll-jank-track-group';
-
-export type ScrollJankTracks = {
- tracksToAdd: AddTrackArgs[];
-};
-
export type ScrollJankTrackGroup = {
- tracks: ScrollJankTracks;
+ tracks: DecideTracksResult;
addTrackGroup: DeferredAction;
};
-export interface ScrollJankTrackSpec {
- key: string;
- sqlTableName: string;
- detailsPanelConfig: CustomSqlDetailsPanelConfig;
-}
-
-// Global state for the scroll jank plugin.
-export class ScrollJankPluginState {
- private static instance?: ScrollJankPluginState;
- private tracks: ObjectByKey<ScrollJankTrackSpec>;
-
- private constructor() {
- this.tracks = {};
- }
-
- public static getInstance(): ScrollJankPluginState {
- if (!ScrollJankPluginState.instance) {
- ScrollJankPluginState.instance = new ScrollJankPluginState();
- }
-
- return ScrollJankPluginState.instance;
- }
-
- public registerTrack(args: {
- kind: string;
- trackKey: string;
- tableName: string;
- detailsPanelConfig: CustomSqlDetailsPanelConfig;
- }): void {
- this.tracks[args.kind] = {
- key: args.trackKey,
- sqlTableName: args.tableName,
- detailsPanelConfig: args.detailsPanelConfig,
- };
- }
-
- public unregisterTrack(kind: string): void {
- delete this.tracks[kind];
- }
-
- public getTrack(kind: string): ScrollJankTrackSpec | undefined {
- return this.tracks[kind];
- }
-}
-
export async function getScrollJankTracks(
engine: Engine,
): Promise<ScrollJankTrackGroup> {
- const result: ScrollJankTracks = {
+ const result: DecideTracksResult = {
tracksToAdd: [],
};
@@ -315,7 +262,7 @@ class ChromeScrollJankPlugin implements Plugin {
ctx.registerTrack({
uri: 'perfetto.ChromeScrollJank#eventLatency',
displayName: 'Chrome Scroll Input Latencies',
- kind: EventLatencyTrack.kind,
+ kind: CHROME_EVENT_LATENCY_TRACK_KIND,
trackFactory: ({trackKey}) => {
return new EventLatencyTrack({engine: ctx.engine, trackKey}, baseTable);
},
@@ -352,7 +299,7 @@ class ChromeScrollJankPlugin implements Plugin {
ctx.registerTrack({
uri: 'perfetto.ChromeScrollJank#scrollJankV3',
displayName: 'Chrome Scroll Janks',
- kind: ScrollJankV3Track.kind,
+ kind: ScrollJankV3TrackKind,
trackFactory: ({trackKey}) => {
return new ScrollJankV3Track({
engine: ctx.engine,
diff --git a/ui/src/core_plugins/chrome_scroll_jank/scroll_details_panel.ts b/ui/src/core_plugins/chrome_scroll_jank/scroll_details_panel.ts
index d1bfb8c30..f8451ad36 100644
--- a/ui/src/core_plugins/chrome_scroll_jank/scroll_details_panel.ts
+++ b/ui/src/core_plugins/chrome_scroll_jank/scroll_details_panel.ts
@@ -48,7 +48,7 @@ import {
getSliceForTrack,
ScrollJankSlice,
} from './scroll_jank_slice';
-import {ScrollJankV3Track} from './scroll_jank_v3_track';
+import {ScrollJankV3TrackKind} from './common';
interface Data {
// Scroll ID.
@@ -328,7 +328,7 @@ export class ScrollDetailsPanel extends BottomTab<GenericSliceDetailsTabConfig>
data.push({
jankLink: getSliceForTrack(
jankSlice.jankSlice,
- ScrollJankV3Track.kind,
+ ScrollJankV3TrackKind,
jankSlice.cause,
),
dur: m(DurationWidget, {dur: jankSlice.delayDur}),
diff --git a/ui/src/core_plugins/chrome_scroll_jank/scroll_jank_slice.ts b/ui/src/core_plugins/chrome_scroll_jank/scroll_jank_slice.ts
index 1ae898dbe..c05ac4347 100644
--- a/ui/src/core_plugins/chrome_scroll_jank/scroll_jank_slice.ts
+++ b/ui/src/core_plugins/chrome_scroll_jank/scroll_jank_slice.ts
@@ -28,9 +28,12 @@ import {EngineProxy} from '../../trace_processor/engine';
import {LONG, NUM} from '../../trace_processor/query_result';
import {Anchor} from '../../widgets/anchor';
-import {EventLatencyTrack} from './event_latency_track';
-import {ScrollJankPluginState, ScrollJankTrackSpec} from './index';
-import {ScrollJankV3Track} from './scroll_jank_v3_track';
+import {
+ CHROME_EVENT_LATENCY_TRACK_KIND,
+ ScrollJankPluginState,
+ ScrollJankTrackSpec,
+ ScrollJankV3TrackKind,
+} from './common';
interface BasicSlice {
// ID of slice.
@@ -76,10 +79,10 @@ export async function getScrollJankSlices(
id: number,
): Promise<ScrollJankSlice[]> {
const track = ScrollJankPluginState.getInstance().getTrack(
- ScrollJankV3Track.kind,
+ ScrollJankV3TrackKind,
);
if (track == undefined) {
- throw new Error(`${ScrollJankV3Track.kind} track is not registered.`);
+ throw new Error(`${ScrollJankV3TrackKind} track is not registered.`);
}
const slices = await getSlicesFromTrack(engine, track, {
@@ -94,10 +97,12 @@ export async function getEventLatencySlice(
id: number,
): Promise<EventLatencySlice | undefined> {
const track = ScrollJankPluginState.getInstance().getTrack(
- EventLatencyTrack.kind,
+ CHROME_EVENT_LATENCY_TRACK_KIND,
);
if (track == undefined) {
- throw new Error(`${EventLatencyTrack.kind} track is not registered.`);
+ throw new Error(
+ `${CHROME_EVENT_LATENCY_TRACK_KIND} track is not registered.`,
+ );
}
const slices = await getSlicesFromTrack(engine, track, {
@@ -135,10 +140,12 @@ export async function getEventLatencyDescendantSlice(
}
const eventLatencyTrack = ScrollJankPluginState.getInstance().getTrack(
- EventLatencyTrack.kind,
+ CHROME_EVENT_LATENCY_TRACK_KIND,
);
if (eventLatencyTrack == undefined) {
- throw new Error(`${EventLatencyTrack.kind} track is not registered.`);
+ throw new Error(
+ `${CHROME_EVENT_LATENCY_TRACK_KIND} track is not registered.`,
+ );
}
if (result.length > 1) {
diff --git a/ui/src/core_plugins/chrome_scroll_jank/scroll_jank_v3_details_panel.ts b/ui/src/core_plugins/chrome_scroll_jank/scroll_jank_v3_details_panel.ts
index e47e75c1e..b117b086e 100644
--- a/ui/src/core_plugins/chrome_scroll_jank/scroll_jank_v3_details_panel.ts
+++ b/ui/src/core_plugins/chrome_scroll_jank/scroll_jank_v3_details_panel.ts
@@ -33,13 +33,13 @@ import {SqlRef} from '../../widgets/sql_ref';
import {MultiParagraphText, TextParagraph} from '../../widgets/text_paragraph';
import {dictToTreeNodes, Tree, TreeNode} from '../../widgets/tree';
-import {EventLatencyTrack} from './event_latency_track';
import {
EventLatencySlice,
getEventLatencyDescendantSlice,
getEventLatencySlice,
getSliceForTrack,
} from './scroll_jank_slice';
+import {CHROME_EVENT_LATENCY_TRACK_KIND} from './common';
interface Data {
name: string;
@@ -269,7 +269,7 @@ export class ScrollJankV3DetailsPanel extends BottomTab<GenericSliceDetailsTabCo
result['Janked Event Latency stage'] = exists(this.causeSliceDetails)
? getSliceForTrack(
this.causeSliceDetails,
- EventLatencyTrack.kind,
+ CHROME_EVENT_LATENCY_TRACK_KIND,
this.data.jankCause,
)
: sqlValueToString(this.data.jankCause);
@@ -278,7 +278,7 @@ export class ScrollJankV3DetailsPanel extends BottomTab<GenericSliceDetailsTabCo
result['Sub-cause of Jank'] = exists(this.subcauseSliceDetails)
? getSliceForTrack(
this.subcauseSliceDetails,
- EventLatencyTrack.kind,
+ CHROME_EVENT_LATENCY_TRACK_KIND,
this.data.jankSubcause,
)
: sqlValueToString(this.data.jankSubcause);
@@ -290,7 +290,7 @@ export class ScrollJankV3DetailsPanel extends BottomTab<GenericSliceDetailsTabCo
m(TreeNode, {
left: getSliceForTrack(
this.eventLatencySliceDetails,
- EventLatencyTrack.kind,
+ CHROME_EVENT_LATENCY_TRACK_KIND,
'Input EventLatency in context of ScrollUpdates',
),
right: '',
diff --git a/ui/src/core_plugins/chrome_scroll_jank/scroll_jank_v3_track.ts b/ui/src/core_plugins/chrome_scroll_jank/scroll_jank_v3_track.ts
index fdb5ad1c0..f77574061 100644
--- a/ui/src/core_plugins/chrome_scroll_jank/scroll_jank_v3_track.ts
+++ b/ui/src/core_plugins/chrome_scroll_jank/scroll_jank_v3_track.ts
@@ -23,26 +23,25 @@ import {
} from '../custom_sql_table_slices';
import {EventLatencyTrackTypes} from './event_latency_track';
-import {
- SCROLL_JANK_GROUP_ID,
- ScrollJankPluginState,
- ScrollJankTracks as DecideTracksResult,
-} from './index';
import {JANK_COLOR} from './jank_colors';
import {ScrollJankV3DetailsPanel} from './scroll_jank_v3_details_panel';
import {getColorForSlice} from '../../core/colorizer';
import {getLegacySelection} from '../../common/state';
+import {
+ DecideTracksResult,
+ SCROLL_JANK_GROUP_ID,
+ ScrollJankPluginState,
+ ScrollJankV3TrackKind,
+} from './common';
const UNKNOWN_SLICE_NAME = 'Unknown';
const JANK_SLICE_NAME = ' Jank';
export class ScrollJankV3Track extends CustomSqlTableSliceTrack<NamedSliceTrackTypes> {
- static readonly kind = 'org.chromium.ScrollJank.scroll_jank_v3_track';
-
constructor(args: NewTrackArgs) {
super(args);
ScrollJankPluginState.getInstance().registerTrack({
- kind: ScrollJankV3Track.kind,
+ kind: ScrollJankV3TrackKind,
trackKey: this.trackKey,
tableName: this.tableName,
detailsPanelConfig: this.getDetailsPanel(),
@@ -78,7 +77,7 @@ export class ScrollJankV3Track extends CustomSqlTableSliceTrack<NamedSliceTrackT
async onDestroy(): Promise<void> {
await super.onDestroy();
- ScrollJankPluginState.getInstance().unregisterTrack(ScrollJankV3Track.kind);
+ ScrollJankPluginState.getInstance().unregisterTrack(ScrollJankV3TrackKind);
}
rowToSlice(row: NamedRow): Slice {
diff --git a/ui/src/core_plugins/chrome_scroll_jank/scroll_track.ts b/ui/src/core_plugins/chrome_scroll_jank/scroll_track.ts
index 8b475694e..123d8f9c6 100644
--- a/ui/src/core_plugins/chrome_scroll_jank/scroll_track.ts
+++ b/ui/src/core_plugins/chrome_scroll_jank/scroll_track.ts
@@ -20,12 +20,12 @@ import {
CustomSqlTableDefConfig,
CustomSqlTableSliceTrack,
} from '../custom_sql_table_slices';
-
import {
+ DecideTracksResult,
SCROLL_JANK_GROUP_ID,
ScrollJankPluginState,
- ScrollJankTracks as DecideTracksResult,
-} from './index';
+} from './common';
+
import {ScrollDetailsPanel} from './scroll_details_panel';
export const CHROME_TOPLEVEL_SCROLLS_KIND =