UNPKG

chrome-devtools-frontend

Version:
112 lines (97 loc) 3.64 kB
// Copyright 2014 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import type * as SDK from '../../core/sdk/sdk.js'; import * as UI from '../../ui/legacy/legacy.js'; import * as Lit from '../../ui/lit/lit.js'; import * as VisualLogging from '../../ui/visual_logging/visual_logging.js'; import * as LayerViewer from '../layer_viewer/layer_viewer.js'; const {html, render} = Lit; const {widget} = UI.Widget; export interface ViewInput { showImageCallback: (arg0?: string|undefined) => void; snapshot: SDK.PaintProfiler.PaintProfilerSnapshot|null; log: SDK.PaintProfiler.PaintProfilerLogItem[]; scale: number; selectionWindow: {left: number, right: number}|null; onWindowChanged: (window: {left: number, right: number}|null) => void; } export type ViewOutput = undefined; export type View = (input: ViewInput, output: ViewOutput, target: HTMLElement) => void; export const DEFAULT_VIEW = (input: ViewInput, _output: ViewOutput, target: HTMLElement): void => { // clang-format off render(html` <devtools-split-view direction="column" jslog=${VisualLogging.pane('layers.paint-profiler').track({resize: true})}> <devtools-widget slot="sidebar" ${widget(LayerViewer.PaintProfilerView.PaintProfilerCommandLogView, { commandLog: input.log, selectionWindow: input.selectionWindow, })}> </devtools-widget> <devtools-widget slot="main" ${widget(LayerViewer.PaintProfilerView.PaintProfilerView, { showImageCallback: input.showImageCallback, snapshotAndLog: {snapshot: input.snapshot, log: input.log}, scale: input.scale, })} @WindowChanged=${(e: CustomEvent<{left: number, right: number}|null>) => input.onWindowChanged(e.detail)}> </devtools-widget> </devtools-split-view> `, target); // clang-format on }; export class LayerPaintProfilerView extends UI.Widget.VBox { readonly #showImageCallback: (arg0?: string|undefined) => void; #snapshot: SDK.PaintProfiler.PaintProfilerSnapshot|null = null; #log: SDK.PaintProfiler.PaintProfilerLogItem[] = []; #scale = 1; #selectionWindow: {left: number, right: number}|null = null; readonly #view: View; constructor(showImageCallback: (arg0?: string|undefined) => void, view: View = DEFAULT_VIEW) { super(); this.#showImageCallback = showImageCallback; this.#view = view; } override wasShown(): void { super.wasShown(); this.requestUpdate(); } override performUpdate(): void { const input: ViewInput = { showImageCallback: this.#showImageCallback, snapshot: this.#snapshot, log: this.#log, scale: this.#scale, selectionWindow: this.#selectionWindow, onWindowChanged: this.onWindowChanged, }; this.#view(input, undefined, this.contentElement); } reset(): void { if (this.#snapshot) { this.#snapshot.release(); } this.#snapshot = null; this.#log = []; this.#selectionWindow = null; this.requestUpdate(); } profile(snapshot: SDK.PaintProfiler.PaintProfilerSnapshot): void { void snapshot.commandLog().then(log => { if (this.#snapshot) { this.#snapshot.release(); } this.#snapshot = snapshot; this.#log = log || []; this.requestUpdate(); }); } setScale(scale: number): void { this.#scale = scale; this.requestUpdate(); } private onWindowChanged = (window: {left: number, right: number}|null): void => { this.#selectionWindow = window; this.requestUpdate(); }; }