chrome-devtools-frontend 1.0.1602348 → 1.0.1603822
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/version-control/SKILL.md +17 -2
- package/AUTHORS +1 -0
- package/front_end/core/common/Settings.ts +1 -871
- package/front_end/core/common/VersionController.ts +880 -0
- package/front_end/core/common/common.ts +2 -0
- package/front_end/core/platform/HostRuntime.ts +9 -3
- package/front_end/core/protocol_client/InspectorBackend.ts +8 -0
- package/front_end/core/root/Runtime.ts +5 -0
- package/front_end/core/sdk/OverlayModel.ts +13 -13
- package/front_end/core/sdk/OverlayPersistentHighlighter.ts +13 -10
- package/front_end/core/sdk/RuntimeModel.ts +5 -5
- package/front_end/core/sdk/ServiceWorkerManager.ts +4 -2
- package/front_end/core/sdk/Target.ts +5 -0
- package/front_end/core/sdk/TargetManager.ts +5 -0
- package/front_end/core/sdk/WebMCPModel.ts +104 -0
- package/front_end/core/sdk/sdk.ts +2 -0
- package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +13 -19
- package/front_end/generated/InspectorBackendCommands.ts +3 -0
- package/front_end/generated/protocol-mapping.d.ts +8 -0
- package/front_end/generated/protocol-proxy-api.d.ts +10 -0
- package/front_end/generated/protocol.ts +57 -0
- package/front_end/models/ai_assistance/AiConversation.ts +3 -3
- package/front_end/models/ai_assistance/agents/AccessibilityAgent.ts +50 -0
- package/front_end/models/ai_assistance/agents/AiAgent.ts +14 -1
- package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +19 -4
- package/front_end/models/ai_assistance/agents/NetworkAgent.ts +7 -1
- package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +30 -7
- package/front_end/models/ai_assistance/agents/StylingAgent.ts +0 -23
- package/front_end/models/ai_assistance/data_formatters/LighthouseFormatter.snapshot.txt +60 -9
- package/front_end/models/ai_assistance/data_formatters/LighthouseFormatter.ts +71 -15
- package/front_end/models/heap_snapshot_model/HeapSnapshotModel.ts +7 -7
- package/front_end/models/javascript_metadata/NativeFunctions.js +6 -2
- package/front_end/models/lighthouse/LighthouseReporterTypes.ts +10 -8
- package/front_end/models/lighthouse/RunTypes.ts +3 -1
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +13 -5
- package/front_end/panels/ai_assistance/components/ChatMessage.ts +143 -18
- package/front_end/panels/ai_assistance/components/WalkthroughView.ts +30 -10
- package/front_end/panels/ai_assistance/components/chatMessage.css +58 -3
- package/front_end/panels/ai_assistance/components/walkthroughView.css +35 -5
- package/front_end/panels/application/AppManifestView.ts +2 -2
- package/front_end/panels/application/BackgroundServiceView.ts +9 -9
- package/front_end/panels/application/FrameDetailsView.ts +4 -13
- package/front_end/panels/application/IndexedDBViews.ts +1 -1
- package/front_end/panels/application/ServiceWorkerCacheViews.ts +3 -3
- package/front_end/panels/application/components/PermissionsPolicySection.ts +1 -1
- package/front_end/panels/application/components/permissionsPolicySection.css +54 -52
- package/front_end/panels/application/frameDetailsReportView.css +13 -1
- package/front_end/panels/common/ThrottlingUtils.ts +46 -0
- package/front_end/panels/common/common.ts +1 -0
- package/front_end/panels/elements/CSSValueTraceView.ts +9 -1
- package/front_end/panels/elements/ComputedStyleWidget.ts +11 -1
- package/front_end/panels/elements/PropertiesWidget.ts +14 -13
- package/front_end/panels/elements/PropertyRenderer.ts +10 -9
- package/front_end/panels/elements/StandaloneStylesContainer.ts +15 -5
- package/front_end/panels/elements/StylePropertiesSection.ts +0 -49
- package/front_end/panels/elements/StylePropertyTreeElement.ts +20 -0
- package/front_end/panels/elements/StylesContainer.ts +0 -1
- package/front_end/panels/elements/StylesSidebarPane.ts +65 -31
- package/front_end/panels/elements/stylePropertiesTreeOutline.css +5 -0
- package/front_end/panels/issues/AffectedSelectivePermissionsInterventionView.ts +2 -2
- package/front_end/panels/lighthouse/LighthouseController.ts +4 -1
- package/front_end/panels/media/EventDisplayTable.ts +3 -2
- package/front_end/panels/mobile_throttling/NetworkThrottlingSelector.ts +14 -0
- package/front_end/panels/network/EventSourceMessagesView.ts +2 -2
- package/front_end/panels/network/ResourceChunkView.ts +1 -1
- package/front_end/panels/profiler/HeapDetachedElementsView.ts +9 -4
- package/front_end/panels/profiler/HeapProfileView.ts +8 -4
- package/front_end/panels/profiler/HeapSnapshotDataGrids.ts +40 -33
- package/front_end/panels/profiler/HeapSnapshotGridNodes.ts +1 -1
- package/front_end/panels/profiler/HeapSnapshotProxy.ts +1 -1
- package/front_end/panels/profiler/HeapSnapshotView.ts +12 -18
- package/front_end/panels/profiler/LiveHeapProfileView.ts +3 -4
- package/front_end/panels/profiler/ProfileHeader.ts +5 -11
- package/front_end/panels/profiler/ProfileView.ts +1 -10
- package/front_end/panels/sensors/SensorsView.ts +24 -43
- package/front_end/panels/settings/keybindsSettingsTab.css +25 -31
- package/front_end/panels/timeline/EventsTimelineTreeView.ts +2 -2
- package/front_end/panels/timeline/ThirdPartyTreeView.ts +8 -0
- package/front_end/panels/timeline/TimelinePanel.ts +14 -2
- package/front_end/panels/timeline/TimelineTreeView.ts +19 -17
- package/front_end/panels/timeline/components/FieldSettingsDialog.ts +5 -9
- package/front_end/panels/timeline/components/LiveMetricsView.ts +1 -2
- package/front_end/panels/timeline/components/OriginMap.ts +176 -159
- package/front_end/panels/timeline/components/originMap.css +4 -51
- package/front_end/panels/timeline/components/timelineRangeSummaryView.css +3 -1
- package/front_end/panels/timeline/thirdPartyTreeView.css +6 -0
- package/front_end/panels/timeline/timeline-meta.ts +11 -0
- package/front_end/panels/timeline/utils/Helpers.ts +5 -25
- package/front_end/panels/webauthn/WebauthnPane.ts +52 -0
- package/front_end/third_party/acorn/README.chromium +1 -0
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/ui/components/{list → lists}/List.ts +1 -1
- package/front_end/ui/components/{list → lists}/list.css +0 -1
- package/front_end/ui/legacy/Treeoutline.ts +7 -3
- package/front_end/ui/legacy/UIUtils.ts +13 -11
- package/front_end/ui/legacy/Widget.ts +5 -0
- package/front_end/ui/legacy/components/data_grid/DataGrid.ts +1 -1
- package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +3 -3
- package/front_end/ui/legacy/components/data_grid/SortableDataGrid.ts +2 -2
- package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +39 -23
- package/front_end/ui/legacy/components/perf_ui/GCActionDelegate.ts +20 -4
- package/front_end/ui/legacy/treeoutline.css +4 -0
- package/front_end/ui/visual_logging/KnownContextValues.ts +2 -0
- package/package.json +1 -1
- /package/front_end/ui/components/{list → lists}/lists.ts +0 -0
|
@@ -1779,20 +1779,21 @@ export class TreeViewElement extends HTMLElementWithLightDOMTemplate {
|
|
|
1779
1779
|
return this.#treeOutline;
|
|
1780
1780
|
}
|
|
1781
1781
|
|
|
1782
|
-
#getParentTreeElement(element: HTMLLIElement|TreeElementWrapper):
|
|
1782
|
+
#getParentTreeElement(element: HTMLLIElement|TreeElementWrapper):
|
|
1783
|
+
{treeElement: TreeElement, expanded: boolean, classes: DOMTokenList}|null {
|
|
1783
1784
|
const subtreeRoot = element.parentElement;
|
|
1784
1785
|
if (!(subtreeRoot instanceof HTMLUListElement)) {
|
|
1785
1786
|
return null;
|
|
1786
1787
|
}
|
|
1787
1788
|
if (subtreeRoot.role === 'tree') {
|
|
1788
|
-
return {treeElement: this.#treeOutline.rootElement(), expanded: false};
|
|
1789
|
+
return {treeElement: this.#treeOutline.rootElement(), expanded: false, classes: subtreeRoot.classList};
|
|
1789
1790
|
}
|
|
1790
1791
|
if (subtreeRoot.role !== 'group' || !subtreeRoot.parentElement) {
|
|
1791
1792
|
return null;
|
|
1792
1793
|
}
|
|
1793
1794
|
const treeElement = TreeViewTreeElement.get(subtreeRoot.parentElement);
|
|
1794
1795
|
const expanded = treeElement ? treeElement.expanded : hasBooleanAttribute(subtreeRoot.parentElement, 'open');
|
|
1795
|
-
return treeElement ? {expanded, treeElement} : null;
|
|
1796
|
+
return treeElement ? {expanded, treeElement, classes: subtreeRoot.classList} : null;
|
|
1796
1797
|
}
|
|
1797
1798
|
|
|
1798
1799
|
protected override updateNode(node: Node, attributeName: string|null): void {
|
|
@@ -1825,6 +1826,9 @@ export class TreeViewElement extends HTMLElementWithLightDOMTemplate {
|
|
|
1825
1826
|
if (!parent) {
|
|
1826
1827
|
continue;
|
|
1827
1828
|
}
|
|
1829
|
+
if (parent.treeElement.childCount() === 0) {
|
|
1830
|
+
parent.treeElement.childrenListElement.classList.add(...parent.classes.values());
|
|
1831
|
+
}
|
|
1828
1832
|
while (nextSibling && nextSibling.nodeType !== Node.ELEMENT_NODE) {
|
|
1829
1833
|
nextSibling = nextSibling.nextSibling;
|
|
1830
1834
|
}
|
|
@@ -1691,19 +1691,21 @@ export function createSVGChild<K extends keyof SVGElementTagNameMap>(
|
|
|
1691
1691
|
return child;
|
|
1692
1692
|
}
|
|
1693
1693
|
|
|
1694
|
-
export const enclosingNodeOrSelfWithNodeNameInArray =
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
1694
|
+
export const enclosingNodeOrSelfWithNodeNameInArray =
|
|
1695
|
+
<T extends keyof HTMLElementTagNameMap>(initialNode: Node, nameArray: T[]): HTMLElementTagNameMap[T]|null => {
|
|
1696
|
+
let node: (Node|null)|Node = initialNode;
|
|
1697
|
+
for (; node && node !== initialNode.ownerDocument; node = node.parentNodeOrShadowHost()) {
|
|
1698
|
+
for (let i = 0; i < nameArray.length; ++i) {
|
|
1699
|
+
if (node.nodeName.toLowerCase() === nameArray[i].toLowerCase()) {
|
|
1700
|
+
return node as HTMLElementTagNameMap[T];
|
|
1701
|
+
}
|
|
1702
|
+
}
|
|
1700
1703
|
}
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
return null;
|
|
1704
|
-
};
|
|
1704
|
+
return null;
|
|
1705
|
+
};
|
|
1705
1706
|
|
|
1706
|
-
export const enclosingNodeOrSelfWithNodeName = function
|
|
1707
|
+
export const enclosingNodeOrSelfWithNodeName = function<T extends keyof HTMLElementTagNameMap>(
|
|
1708
|
+
node: Node, nodeName: T): HTMLElementTagNameMap[T]|null {
|
|
1707
1709
|
return enclosingNodeOrSelfWithNodeNameInArray(node, [nodeName]);
|
|
1708
1710
|
};
|
|
1709
1711
|
|
|
@@ -129,6 +129,10 @@ function runNextUpdate(): void {
|
|
|
129
129
|
const controller = new AbortController();
|
|
130
130
|
widget.addUpdateController(controller);
|
|
131
131
|
await widget.performUpdate(controller.signal);
|
|
132
|
+
} catch (e) {
|
|
133
|
+
if (e.name !== 'AbortError') {
|
|
134
|
+
throw e;
|
|
135
|
+
}
|
|
132
136
|
} finally {
|
|
133
137
|
resolve();
|
|
134
138
|
}
|
|
@@ -1055,6 +1059,7 @@ export class Widget {
|
|
|
1055
1059
|
}
|
|
1056
1060
|
|
|
1057
1061
|
addUpdateController(controller: AbortController): void {
|
|
1062
|
+
this.#updateController?.abort();
|
|
1058
1063
|
this.#updateController = controller;
|
|
1059
1064
|
}
|
|
1060
1065
|
|
|
@@ -2552,7 +2552,7 @@ export interface Parameters {
|
|
|
2552
2552
|
refreshCallback?: (() => void);
|
|
2553
2553
|
}
|
|
2554
2554
|
export interface ColumnDescriptor {
|
|
2555
|
-
id:
|
|
2555
|
+
id: string;
|
|
2556
2556
|
title?: Common.UIString.LocalizedString;
|
|
2557
2557
|
titleDOMFragment?: DocumentFragment|null;
|
|
2558
2558
|
sortable: boolean;
|
|
@@ -550,11 +550,11 @@ class DataGridElementNode extends SortableDataGridNode<DataGridElementNode> {
|
|
|
550
550
|
}
|
|
551
551
|
const cell = this.createTD(columnId);
|
|
552
552
|
cell.setAttribute('part', `${columnId}-column`);
|
|
553
|
-
if (this.isCreationNode) {
|
|
554
|
-
return cell;
|
|
555
|
-
}
|
|
556
553
|
const configCells = [...this.#configElement.children].filter(c => c.tagName === 'TD') as HTMLTableCellElement[];
|
|
557
554
|
const configCell = configCells[index];
|
|
555
|
+
if (this.isCreationNode && !configCell) {
|
|
556
|
+
return cell;
|
|
557
|
+
}
|
|
558
558
|
if (!configCell) {
|
|
559
559
|
throw new Error(`Column ${columnId} not found in the data grid`);
|
|
560
560
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// found in the LICENSE file.
|
|
4
4
|
|
|
5
5
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
6
|
-
|
|
6
|
+
import type * as Common from '../../../../core/common/common.js';
|
|
7
7
|
import * as Platform from '../../../../core/platform/platform.js';
|
|
8
8
|
|
|
9
9
|
import {type ColumnDescriptor, type DataGridData, Events, type Parameters} from './DataGrid.js';
|
|
@@ -61,7 +61,7 @@ export class SortableDataGrid<T> extends ViewportDataGrid<SortableDataGridNode<T
|
|
|
61
61
|
const columns: ColumnDescriptor[] = [];
|
|
62
62
|
for (let i = 0; i < columnNames.length; ++i) {
|
|
63
63
|
const id = String(i);
|
|
64
|
-
columns.push(({id, title: columnNames[i], sortable: true}
|
|
64
|
+
columns.push(({id, title: columnNames[i] as Common.UIString.LocalizedString, sortable: true}));
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
const nodes = [];
|
|
@@ -50,6 +50,7 @@ import objectPropertiesSectionStyles from './objectPropertiesSection.css.js';
|
|
|
50
50
|
import objectValueStyles from './objectValue.css.js';
|
|
51
51
|
import {RemoteObjectPreviewFormatter, renderNodeTitle} from './RemoteObjectPreviewFormatter.js';
|
|
52
52
|
|
|
53
|
+
export {objectPropertiesSectionStyles, objectValueStyles};
|
|
53
54
|
const {widget} = UI.Widget;
|
|
54
55
|
const {ref, repeat, ifDefined, classMap} = Directives;
|
|
55
56
|
const UIStrings = {
|
|
@@ -1369,10 +1370,18 @@ export class ObjectPropertyTreeElement extends UI.TreeOutline.TreeElement {
|
|
|
1369
1370
|
}
|
|
1370
1371
|
}
|
|
1371
1372
|
|
|
1372
|
-
static
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1373
|
+
static *
|
|
1374
|
+
createPropertyNodes(
|
|
1375
|
+
{properties, internalProperties, accessors, arrayRanges}: NodeChildren, skipProto: boolean,
|
|
1376
|
+
skipGettersAndSetters: boolean, linkifier?: Components.Linkifier.Linkifier, emptyPlaceholder?: string|null,
|
|
1377
|
+
isNotDisplayablePropertyCallback?: (property: SDK.RemoteObject.RemoteObjectProperty) => boolean):
|
|
1378
|
+
Generator<UI.TreeOutline.TreeElement> {
|
|
1379
|
+
let empty = true;
|
|
1380
|
+
// Arrays with large numbers of elements are paginated into arrayRanges.
|
|
1381
|
+
// If we have array ranges, the object is not empty.
|
|
1382
|
+
if (arrayRanges && arrayRanges.length > 0) {
|
|
1383
|
+
empty = false;
|
|
1384
|
+
}
|
|
1376
1385
|
properties?.sort(ObjectPropertiesSection.compareProperties);
|
|
1377
1386
|
|
|
1378
1387
|
const entriesProperty = internalProperties?.find(({property}) => property.name === '[[Entries]]');
|
|
@@ -1380,12 +1389,12 @@ export class ObjectPropertyTreeElement extends UI.TreeOutline.TreeElement {
|
|
|
1380
1389
|
const treeElement = new ObjectPropertyTreeElement(entriesProperty, linkifier);
|
|
1381
1390
|
treeElement.setExpandable(true);
|
|
1382
1391
|
treeElement.expand();
|
|
1383
|
-
|
|
1392
|
+
empty = false;
|
|
1393
|
+
yield treeElement;
|
|
1384
1394
|
}
|
|
1385
1395
|
|
|
1386
1396
|
for (const property of properties ?? []) {
|
|
1387
|
-
if (
|
|
1388
|
-
!ObjectPropertiesSection.isDisplayableProperty(property.property, treeNode.property?.property)) {
|
|
1397
|
+
if (isNotDisplayablePropertyCallback?.(property.property)) {
|
|
1389
1398
|
continue;
|
|
1390
1399
|
}
|
|
1391
1400
|
|
|
@@ -1398,12 +1407,13 @@ export class ObjectPropertyTreeElement extends UI.TreeOutline.TreeElement {
|
|
|
1398
1407
|
element.expand();
|
|
1399
1408
|
}
|
|
1400
1409
|
}
|
|
1401
|
-
|
|
1410
|
+
empty = false;
|
|
1411
|
+
yield element;
|
|
1402
1412
|
}
|
|
1403
1413
|
}
|
|
1404
1414
|
|
|
1405
1415
|
for (const accessor of accessors ?? []) {
|
|
1406
|
-
|
|
1416
|
+
yield new ObjectPropertyTreeElement(accessor, linkifier);
|
|
1407
1417
|
}
|
|
1408
1418
|
|
|
1409
1419
|
for (const property of internalProperties ?? []) {
|
|
@@ -1414,10 +1424,28 @@ export class ObjectPropertyTreeElement extends UI.TreeOutline.TreeElement {
|
|
|
1414
1424
|
if (property.property.name === '[[Prototype]]' && skipProto) {
|
|
1415
1425
|
continue;
|
|
1416
1426
|
}
|
|
1417
|
-
|
|
1427
|
+
empty = false;
|
|
1428
|
+
yield treeElement;
|
|
1418
1429
|
}
|
|
1419
1430
|
|
|
1420
|
-
|
|
1431
|
+
if (empty) {
|
|
1432
|
+
const title = document.createElement('div');
|
|
1433
|
+
title.classList.add('gray-info-message');
|
|
1434
|
+
title.textContent = emptyPlaceholder || i18nString(UIStrings.noProperties);
|
|
1435
|
+
const infoElement = new UI.TreeOutline.TreeElement(title);
|
|
1436
|
+
yield infoElement;
|
|
1437
|
+
}
|
|
1438
|
+
}
|
|
1439
|
+
|
|
1440
|
+
static populateWithProperties(
|
|
1441
|
+
treeNode: UI.TreeOutline.TreeElement, children: NodeChildren, skipProto: boolean, skipGettersAndSetters: boolean,
|
|
1442
|
+
linkifier?: Components.Linkifier.Linkifier, emptyPlaceholder?: string|null): void {
|
|
1443
|
+
for (const childNode of this.createPropertyNodes(
|
|
1444
|
+
children, skipProto, skipGettersAndSetters, linkifier, emptyPlaceholder,
|
|
1445
|
+
property => treeNode instanceof ObjectPropertyTreeElement &&
|
|
1446
|
+
!ObjectPropertiesSection.isDisplayableProperty(property, treeNode.property?.property))) {
|
|
1447
|
+
treeNode.appendChild(childNode);
|
|
1448
|
+
}
|
|
1421
1449
|
}
|
|
1422
1450
|
|
|
1423
1451
|
revertHighlightChanges(): void {
|
|
@@ -1450,18 +1478,6 @@ export class ObjectPropertyTreeElement extends UI.TreeOutline.TreeElement {
|
|
|
1450
1478
|
await this.property.setValue(expression);
|
|
1451
1479
|
}
|
|
1452
1480
|
|
|
1453
|
-
private static appendEmptyPlaceholderIfNeeded(treeNode: UI.TreeOutline.TreeElement, emptyPlaceholder?: string|null):
|
|
1454
|
-
void {
|
|
1455
|
-
if (treeNode.childCount()) {
|
|
1456
|
-
return;
|
|
1457
|
-
}
|
|
1458
|
-
const title = document.createElement('div');
|
|
1459
|
-
title.classList.add('gray-info-message');
|
|
1460
|
-
title.textContent = emptyPlaceholder || i18nString(UIStrings.noProperties);
|
|
1461
|
-
const infoElement = new UI.TreeOutline.TreeElement(title);
|
|
1462
|
-
treeNode.appendChild(infoElement);
|
|
1463
|
-
}
|
|
1464
|
-
|
|
1465
1481
|
private showAllPropertiesElementSelected(element: UI.TreeOutline.TreeElement): boolean {
|
|
1466
1482
|
this.removeChild(element);
|
|
1467
1483
|
this.children().forEach(x => {
|
|
@@ -2,15 +2,31 @@
|
|
|
2
2
|
// Use of this source code is governed by a BSD-style license that can be
|
|
3
3
|
// found in the LICENSE file.
|
|
4
4
|
|
|
5
|
+
import * as i18n from '../../../../core/i18n/i18n.js';
|
|
5
6
|
import * as SDK from '../../../../core/sdk/sdk.js';
|
|
7
|
+
import * as Snackbars from '../../../components/snackbars/snackbars.js';
|
|
6
8
|
import type * as UI from '../../legacy.js';
|
|
7
9
|
|
|
10
|
+
const UIStrings = {
|
|
11
|
+
/**
|
|
12
|
+
* @description Notification message shown to the user when garbage collection has completed.
|
|
13
|
+
*/
|
|
14
|
+
garbageCollectionCompleted: 'Garbage collection completed',
|
|
15
|
+
} as const;
|
|
16
|
+
|
|
17
|
+
const str_ = i18n.i18n.registerUIStrings('ui/legacy/components/perf_ui/GCActionDelegate.ts', UIStrings);
|
|
18
|
+
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
19
|
+
|
|
8
20
|
export class GCActionDelegate implements UI.ActionRegistration.ActionDelegate {
|
|
9
21
|
handleAction(_context: UI.Context.Context, _actionId: string): boolean {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
22
|
+
const promises = SDK.TargetManager.TargetManager.instance()
|
|
23
|
+
.models(SDK.HeapProfilerModel.HeapProfilerModel)
|
|
24
|
+
.map(heapProfilerModel => heapProfilerModel.collectGarbage());
|
|
25
|
+
|
|
26
|
+
void Promise.all(promises).then(() => {
|
|
27
|
+
Snackbars.Snackbar.Snackbar.show({message: i18nString(UIStrings.garbageCollectionCompleted)});
|
|
28
|
+
});
|
|
29
|
+
|
|
14
30
|
return true;
|
|
15
31
|
}
|
|
16
32
|
}
|
package/package.json
CHANGED
|
File without changes
|