豆豆友情提示:这是一个非官方 GitHub 代理镜像,主要用于网络测试或访问加速。请勿在此进行登录、注册或处理任何敏感信息。进行这些操作请务必访问官方网站 github.com。 Raw 内容也通过此代理提供。
Skip to content

Commit 1669e7e

Browse files
szuendDevtools-frontend LUCI CQ
authored andcommitted
[ui] Delay 'PreRegisteredView' instantiation
Rather then eagerly creating `PreRegisteredView` we just store the `ViewRegistration` (now in a Map). The plan is to create the `ViewManager` with a `Universe` instance. Then we pass the `Universe` along when creating the `PreRegisteredView` so we can then pass it along to `loadView`. R=dsv@chromium.org Bug: 451502260 Change-Id: I6264da50f429221055c98d7474e86c439ff847ee Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/7207148 Commit-Queue: Simon Zünd <szuend@chromium.org> Reviewed-by: Danil Somsikov <dsv@chromium.org>
1 parent a4a64ee commit 1669e7e

File tree

5 files changed

+23
-24
lines changed

5 files changed

+23
-24
lines changed

front_end/entrypoints/main/MainImpl.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -947,7 +947,7 @@ export class MainMenuItem implements UI.Toolbar.Provider {
947947
contextMenu.appendItemsAtLocation('mainMenu');
948948
const moreTools =
949949
contextMenu.defaultSection().appendSubMenuItem(i18nString(UIStrings.moreTools), false, 'more-tools');
950-
const viewExtensions = UI.ViewManager.getRegisteredViewExtensions();
950+
const viewExtensions = UI.ViewManager.ViewManager.instance().getRegisteredViewExtensions();
951951
viewExtensions.sort((extension1, extension2) => {
952952
const title1 = extension1.title();
953953
const title2 = extension2.title();

front_end/panels/settings/SettingsScreen.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -581,7 +581,7 @@ export class Revealer implements Common.Revealer.Revealer<Root.Runtime.Experimen
581581
}
582582

583583
// Reveal settings views
584-
for (const view of UI.ViewManager.getRegisteredViewExtensions()) {
584+
for (const view of UI.ViewManager.ViewManager.instance().getRegisteredViewExtensions()) {
585585
const id = view.viewId();
586586
const location = view.location();
587587
if (location !== UI.ViewManager.ViewLocationValues.SETTINGS_VIEW) {

front_end/ui/legacy/ViewManager.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,8 @@ export class ViewManager extends Common.ObjectWrapper.ObjectWrapper<EventTypes>
168168
private readonly locationNameByViewId = new Map<string, string>();
169169
private readonly locationOverrideSetting: Common.Settings.Setting<Record<string, string>>;
170170

171+
private readonly preRegisteredViews: PreRegisteredView[] = [];
172+
171173
private constructor() {
172174
super();
173175

@@ -180,9 +182,9 @@ export class ViewManager extends Common.ObjectWrapper.ObjectWrapper<EventTypes>
180182

181183
const viewsByLocation = new Map<ViewLocationValues|'none', PreRegisteredView[]>();
182184
for (const view of getRegisteredViewExtensions()) {
183-
const location = view.location() || 'none';
185+
const location = view.location || 'none';
184186
const views = viewsByLocation.get(location) || [];
185-
views.push(view);
187+
views.push(new PreRegisteredView(view));
186188
viewsByLocation.set(location, views);
187189
}
188190

@@ -209,6 +211,7 @@ export class ViewManager extends Common.ObjectWrapper.ObjectWrapper<EventTypes>
209211
throw new Error(`Invalid view ID '${viewId}'`);
210212
}
211213
this.views.set(viewId, view);
214+
this.preRegisteredViews.push(view);
212215
// Use the preferred user location if available
213216
const locationName = preferredExtensionLocations[viewId] || location;
214217
this.locationNameByViewId.set(viewId, locationName as string);
@@ -241,6 +244,10 @@ export class ViewManager extends Common.ObjectWrapper.ObjectWrapper<EventTypes>
241244
return toolbar;
242245
}
243246

247+
getRegisteredViewExtensions(): PreRegisteredView[] {
248+
return this.preRegisteredViews;
249+
}
250+
244251
locationNameForViewId(viewId: string): string {
245252
const locationName = this.locationNameByViewId.get(viewId);
246253
if (!locationName) {
@@ -1004,7 +1011,6 @@ class StackLocation extends Location implements ViewLocation {
10041011
export {
10051012
getLocalizedViewLocationCategory,
10061013
getRegisteredLocationResolvers,
1007-
getRegisteredViewExtensions,
10081014
maybeRemoveViewExtension,
10091015
registerLocationResolver,
10101016
registerViewExtension,

front_end/ui/legacy/ViewRegistration.ts

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import type * as Platform from '../../core/platform/platform.js';
77
import * as Root from '../../core/root/root.js';
88

99
import type {ViewLocationResolver} from './View.js';
10-
import {PreRegisteredView} from './ViewManager.js';
1110
import type {Widget} from './Widget.js';
1211

1312
const UIStrings = {
@@ -43,8 +42,6 @@ const UIStrings = {
4342
const str_ = i18n.i18n.registerUIStrings('ui/legacy/ViewRegistration.ts', UIStrings);
4443
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
4544

46-
const registeredViewExtensions: PreRegisteredView[] = [];
47-
4845
export const enum ViewPersistence {
4946
CLOSEABLE = 'closeable',
5047
PERMANENT = 'permanent',
@@ -160,28 +157,25 @@ export interface ViewRegistration {
160157
featurePromotionId?: string;
161158
}
162159

163-
const viewIdSet = new Set<string>();
160+
const registeredViewExtensions = new Map<string, ViewRegistration>();
161+
164162
export function registerViewExtension(registration: ViewRegistration): void {
165163
const viewId = registration.id;
166-
if (viewIdSet.has(viewId)) {
164+
if (registeredViewExtensions.has(viewId)) {
167165
throw new Error(`Duplicate view id '${viewId}'`);
168166
}
169-
viewIdSet.add(viewId);
170-
registeredViewExtensions.push(new PreRegisteredView(registration));
167+
registeredViewExtensions.set(viewId, registration);
171168
}
172169

173-
export function getRegisteredViewExtensions(): PreRegisteredView[] {
174-
return registeredViewExtensions.filter(
175-
view => Root.Runtime.Runtime.isDescriptorEnabled({experiment: view.experiment(), condition: view.condition()}));
170+
export function getRegisteredViewExtensions(): ViewRegistration[] {
171+
return registeredViewExtensions.values()
172+
.filter(
173+
view => Root.Runtime.Runtime.isDescriptorEnabled({experiment: view.experiment, condition: view.condition}))
174+
.toArray();
176175
}
177176

178177
export function maybeRemoveViewExtension(viewId: string): boolean {
179-
const viewIndex = registeredViewExtensions.findIndex(view => view.viewId() === viewId);
180-
if (viewIndex < 0 || !viewIdSet.delete(viewId)) {
181-
return false;
182-
}
183-
registeredViewExtensions.splice(viewIndex, 1);
184-
return true;
178+
return registeredViewExtensions.delete(viewId);
185179
}
186180

187181
const registeredLocationResolvers: LocationResolverRegistration[] = [];
@@ -202,10 +196,9 @@ export function getRegisteredLocationResolvers(): LocationResolverRegistration[]
202196
}
203197

204198
export function resetViewRegistration(): void {
205-
registeredViewExtensions.length = 0;
199+
registeredViewExtensions.clear();
206200
registeredLocationResolvers.length = 0;
207201
viewLocationNameSet.clear();
208-
viewIdSet.clear();
209202
}
210203

211204
export const enum ViewLocationCategory {

front_end/ui/legacy/components/quick_open/CommandMenu.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ export class CommandMenu {
201201
locations.set(name, category);
202202
}
203203
}
204-
const views = UI.ViewManager.getRegisteredViewExtensions();
204+
const views = UI.ViewManager.ViewManager.instance().getRegisteredViewExtensions();
205205
for (const view of views) {
206206
const viewLocation = view.location();
207207
const category = viewLocation && locations.get(viewLocation);

0 commit comments

Comments
 (0)