diff options
author | Steve Golton <stevegolton@google.com> | 2024-05-09 10:06:46 +0100 |
---|---|---|
committer | Steve Golton <stevegolton@google.com> | 2024-05-09 15:37:55 +0000 |
commit | 13503daf68a82a31413a1ed9c2e28ada766e2ed8 (patch) | |
tree | 61c8f1ca3283d0aa28ee870a5f8e54886f3cf519 /ui | |
parent | 52ec5ca6b4175792f1283a76b89570cf935c7119 (diff) | |
download | perfetto-13503daf68a82a31413a1ed9c2e28ada766e2ed8.tar.gz |
ui: Remove 7 circular imports within scroll jank plugin
Bug: 339637391
Change-Id: Ibb57dcc45288599706df681c05ffbbedfdd6be38
Diffstat (limited to 'ui')
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 = |