[ui] Removed unrelated functionality from frontendLocalState. Change-Id: Ic1dd36506f67d5d23b04c94c8cce04237e079f24
diff --git a/ui/src/base/dom_utils.ts b/ui/src/base/dom_utils.ts index d7c7582..5caf9d9 100644 --- a/ui/src/base/dom_utils.ts +++ b/ui/src/base/dom_utils.ts
@@ -82,3 +82,25 @@ return {x: e.offsetX, y: e.offsetY}; } + +function calculateScrollbarWidth() { + const outer = document.createElement('div'); + outer.style.overflowY = 'scroll'; + const inner = document.createElement('div'); + outer.appendChild(inner); + document.body.appendChild(outer); + const width = + outer.getBoundingClientRect().width - inner.getBoundingClientRect().width; + document.body.removeChild(outer); + return width; +} + +let cachedScrollBarWidth: number|undefined = undefined; + +// Calculate the space a scrollbar takes up. +export function getScrollbarWidth() { + if (cachedScrollBarWidth === undefined) { + cachedScrollBarWidth = calculateScrollbarWidth(); + } + return cachedScrollBarWidth; +}
diff --git a/ui/src/frontend/frontend_local_state.ts b/ui/src/frontend/frontend_local_state.ts index 86c30db..a649966 100644 --- a/ui/src/frontend/frontend_local_state.ts +++ b/ui/src/frontend/frontend_local_state.ts
@@ -26,7 +26,6 @@ VisibleState, } from '../common/state'; import {raf} from '../core/raf_scheduler'; -import {HttpRpcState} from '../trace_processor/http_rpc_engine'; import {globals} from './globals'; import {ratelimit} from './rate_limiters'; @@ -47,20 +46,6 @@ return current; } -// Calculate the space a scrollbar takes up so that we can subtract it from -// the canvas width. -function calculateScrollbarWidth() { - const outer = document.createElement('div'); - outer.style.overflowY = 'scroll'; - const inner = document.createElement('div'); - outer.appendChild(inner); - document.body.appendChild(outer); - const width = - outer.getBoundingClientRect().width - inner.getBoundingClientRect().width; - document.body.removeChild(outer); - return width; -} - // Immutable object describing a (high precision) time window, providing methods // for common mutation operations (pan, zoom), and accessors for common // properties such as spans and durations in several formats. @@ -155,17 +140,10 @@ private visibleWindow = new TimeWindow(); private _timeScale = this.visibleWindow.createTimeScale(0, 0); private _windowSpan = PxSpan.ZERO; - showPanningHint = false; - showCookieConsent = false; - scrollToTrackKey?: string|number; - httpRpcState: HttpRpcState = {connected: false}; - newVersionAvailable = false; // This is used to calculate the tracks within a Y range for area selection. areaY: Range = {}; - private scrollBarWidth?: number; - private _visibleState: VisibleState = { lastUpdate: 0, start: Time.ZERO, @@ -179,18 +157,6 @@ // and a |timeScale| have a notion of time range. That should live in one // place only. - getScrollbarWidth() { - if (this.scrollBarWidth === undefined) { - this.scrollBarWidth = calculateScrollbarWidth(); - } - return this.scrollBarWidth; - } - - setHttpRpcState(httpRpcState: HttpRpcState) { - this.httpRpcState = httpRpcState; - raf.scheduleFullRedraw(); - } - zoomVisibleWindow(ratio: number, centerPoint: number) { this.visibleWindow = this.visibleWindow.zoom(ratio, centerPoint); this._timeScale = this.visibleWindow.createTimeScale( @@ -231,7 +197,6 @@ assertTrue( end >= start, `Impossible select area: start [${start}] >= end [${end}]`); - this.showPanningHint = true; this._selectedArea = {start, end, tracks}; raf.scheduleFullRedraw(); }
diff --git a/ui/src/frontend/globals.ts b/ui/src/frontend/globals.ts index 7323ba5..435bf99 100644 --- a/ui/src/frontend/globals.ts +++ b/ui/src/frontend/globals.ts
@@ -47,6 +47,7 @@ import {setPerfHooks} from '../core/perf'; import {raf} from '../core/raf_scheduler'; import {Engine} from '../trace_processor/engine'; +import {HttpRpcState} from '../trace_processor/http_rpc_engine'; import {Analytics, initAnalytics} from './analytics'; import {BottomTabList} from './bottom_tab'; @@ -283,6 +284,11 @@ private _utcOffset = Time.ZERO; private _openQueryHandler?: OpenQueryHandler; + scrollToTrackKey?: string|number; + httpRpcState: HttpRpcState = {connected: false}; + newVersionAvailable = false; + showPanningHint = false; + // TODO(hjd): Remove once we no longer need to update UUID on redraw. private _publishRedraw?: () => void = undefined;
diff --git a/ui/src/frontend/panel_container.ts b/ui/src/frontend/panel_container.ts index 14550e7..5497d8e 100644 --- a/ui/src/frontend/panel_container.ts +++ b/ui/src/frontend/panel_container.ts
@@ -15,6 +15,7 @@ import m from 'mithril'; import {Trash} from '../base/disposable'; +import {getScrollbarWidth} from '../base/dom_utils'; import {assertExists, assertFalse} from '../base/logging'; import {SimpleResizeObserver} from '../base/resize_observer'; import { @@ -333,8 +334,7 @@ // On non-MacOS if there is a solid scroll bar it can cover important // pixels, reduce the size of the canvas so it doesn't overlap with // the scroll bar. - this.parentWidth = - clientRect.width - globals.frontendLocalState.getScrollbarWidth(); + this.parentWidth = clientRect.width - getScrollbarWidth(); this.parentHeight = clientRect.height; return this.parentHeight !== oldHeight || this.parentWidth !== oldWidth; }
diff --git a/ui/src/frontend/publish.ts b/ui/src/frontend/publish.ts index 8ed0c2d..d23be62 100644 --- a/ui/src/frontend/publish.ts +++ b/ui/src/frontend/publish.ts
@@ -25,6 +25,7 @@ import {MetricResult} from '../common/metric_data'; import {CurrentSearchResults, SearchSummary} from '../common/search_data'; import {raf} from '../core/raf_scheduler'; +import {HttpRpcState} from '../trace_processor/http_rpc_engine'; import { CounterDetails, @@ -81,6 +82,11 @@ globals.publishRedraw(); } +export function publishHttpRpcState(httpRpcState: HttpRpcState) { + globals.httpRpcState = httpRpcState; + raf.scheduleFullRedraw(); +} + export function publishCounterDetails(click: CounterDetails) { globals.counterDetails = click; globals.publishRedraw(); @@ -216,3 +222,8 @@ globals.ftracePanelData = data; globals.publishRedraw(); } + +export function publishShowPanningHint() { + globals.showPanningHint = true; + globals.publishRedraw(); +}
diff --git a/ui/src/frontend/rpc_http_dialog.ts b/ui/src/frontend/rpc_http_dialog.ts index c2a64a2..54796b8 100644 --- a/ui/src/frontend/rpc_http_dialog.ts +++ b/ui/src/frontend/rpc_http_dialog.ts
@@ -22,6 +22,7 @@ import {globals} from './globals'; import {showModal} from './modal'; +import {publishHttpRpcState} from './publish'; const CURRENT_API_VERSION = TraceProcessorApiVersion.TRACE_PROCESSOR_CURRENT_API_VERSION; @@ -79,7 +80,7 @@ // having to open a trace). export async function CheckHttpRpcConnection(): Promise<void> { const state = await HttpRpcEngine.checkConnection(); - globals.frontendLocalState.setHttpRpcState(state); + publishHttpRpcState(state); if (!state.connected) return; const tpStatus = assertExists(state.status);
diff --git a/ui/src/frontend/scroll_helper.ts b/ui/src/frontend/scroll_helper.ts index dccad06..b514b61 100644 --- a/ui/src/frontend/scroll_helper.ts +++ b/ui/src/frontend/scroll_helper.ts
@@ -135,7 +135,7 @@ // group and scroll to the track or just scroll to the track group. if (openGroup) { // After the track exists in the dom, it will be scrolled to. - globals.frontendLocalState.scrollToTrackKey = trackKey; + globals.scrollToTrackKey = trackKey; globals.dispatch(Actions.toggleTrackGroupCollapsed({trackGroupId})); return; } else {
diff --git a/ui/src/frontend/service_worker_controller.ts b/ui/src/frontend/service_worker_controller.ts index a6082fe..de5323e 100644 --- a/ui/src/frontend/service_worker_controller.ts +++ b/ui/src/frontend/service_worker_controller.ts
@@ -88,7 +88,7 @@ // Ctrl+Shift+R). In these cases, we are already at the last // version. if (sw !== this._initialWorker && this._initialWorker) { - globals.frontendLocalState.newVersionAvailable = true; + globals.newVersionAvailable = true; } } }
diff --git a/ui/src/frontend/sidebar.ts b/ui/src/frontend/sidebar.ts index c0c23bf..6d3e79b 100644 --- a/ui/src/frontend/sidebar.ts +++ b/ui/src/frontend/sidebar.ts
@@ -631,7 +631,7 @@ // RPC server is shut down after we load the UI and cached httpRpcState) // this will eventually become consistent once the engine is created. if (mode === undefined) { - if (globals.frontendLocalState.httpRpcState.connected && + if (globals.httpRpcState.connected && globals.state.newEngineMode === 'USE_HTTP_RPC_IF_AVAILABLE') { mode = 'HTTP_RPC'; } else {
diff --git a/ui/src/frontend/topbar.ts b/ui/src/frontend/topbar.ts index 70aed74..4bea985 100644 --- a/ui/src/frontend/topbar.ts +++ b/ui/src/frontend/topbar.ts
@@ -45,7 +45,7 @@ m('button.notification-btn.preferred', { onclick: () => { - globals.frontendLocalState.newVersionAvailable = false; + globals.newVersionAvailable = false; raf.scheduleFullRedraw(); }, }, @@ -61,7 +61,7 @@ // does not persist for iFrames. The host is responsible for communicating // to users that they can press '?' for help. if (globals.embeddedMode || dismissed === 'true' || - !globals.frontendLocalState.showPanningHint) { + !globals.showPanningHint) { return; } return m( @@ -72,7 +72,7 @@ m('button.hint-dismiss-button', { onclick: () => { - globals.frontendLocalState.showPanningHint = false; + globals.showPanningHint = false; localStorage.setItem(DISMISSED_PANNING_HINT_KEY, 'true'); raf.scheduleFullRedraw(); }, @@ -113,9 +113,7 @@ return m( '.topbar', {class: globals.state.sidebarVisible ? '' : 'hide-sidebar'}, - globals.frontendLocalState.newVersionAvailable ? - m(NewVersionNotification) : - omnibox, + globals.newVersionAvailable ? m(NewVersionNotification) : omnibox, m(Progress), m(HelpPanningNotification), m(TraceErrorIcon));
diff --git a/ui/src/frontend/track_panel.ts b/ui/src/frontend/track_panel.ts index c877ad1..56318d1 100644 --- a/ui/src/frontend/track_panel.ts +++ b/ui/src/frontend/track_panel.ts
@@ -297,9 +297,9 @@ } oncreate({attrs}: m.CVnode<TrackComponentAttrs>) { - if (globals.frontendLocalState.scrollToTrackKey === attrs.trackState.key) { + if (globals.scrollToTrackKey === attrs.trackState.key) { verticalScrollToTrack(attrs.trackState.key); - globals.frontendLocalState.scrollToTrackKey = undefined; + globals.scrollToTrackKey = undefined; } } }
diff --git a/ui/src/frontend/viewer_page.ts b/ui/src/frontend/viewer_page.ts index 8aeabde..57aa0a3 100644 --- a/ui/src/frontend/viewer_page.ts +++ b/ui/src/frontend/viewer_page.ts
@@ -14,6 +14,7 @@ import m from 'mithril'; +import {getScrollbarWidth} from '../base/dom_utils'; import {clamp} from '../base/math_utils'; import {Time} from '../base/time'; import {Actions} from '../common/actions'; @@ -28,6 +29,7 @@ import {createPage} from './pages'; import {PanAndZoomHandler} from './pan_and_zoom_handler'; import {AnyAttrsVnode, PanelContainer} from './panel_container'; +import {publishShowPanningHint} from './publish'; import {TickmarkPanel} from './tickmark_panel'; import {TimeAxisPanel} from './time_axis_panel'; import {TimeSelectionPanel} from './time_selection_panel'; @@ -96,9 +98,7 @@ const updateDimensions = () => { const rect = vnode.dom.getBoundingClientRect(); frontendLocalState.updateLocalLimits( - 0, - rect.width - TRACK_SHELL_WIDTH - - frontendLocalState.getScrollbarWidth()); + 0, rect.width - TRACK_SHELL_WIDTH - getScrollbarWidth()); }; updateDimensions(); @@ -193,6 +193,7 @@ ); frontendLocalState.areaY.start = dragStartY; frontendLocalState.areaY.end = currentY; + publishShowPanningHint(); } raf.scheduleRedraw(); },