Skip to content

Commit 2938b34

Browse files
OrKoNDevtools-frontend LUCI CQ
authored andcommitted
Use ResizeObserver to detect changes in rendered objects
Bug: 407751692 Change-Id: Ic36c25e87af5913ef33bf24e04a5416fff299584 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6899427 Reviewed-by: Philip Pfaffe <[email protected]> Commit-Queue: Alex Rudenko <[email protected]>
1 parent a212252 commit 2938b34

File tree

2 files changed

+19
-16
lines changed

2 files changed

+19
-16
lines changed

front_end/panels/console/ConsoleView.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,8 @@ export class ConsoleView extends UI.Widget.VBox implements
308308
private messagesCountElement: HTMLElement;
309309
private viewportThrottler: Common.Throttler.Throttler;
310310
private pendingBatchResize: boolean;
311-
private readonly onMessageResizedBound: (e: Common.EventTarget.EventTargetEvent<UI.TreeOutline.TreeElement>) => void;
311+
private readonly onMessageResizedBound:
312+
(e: Common.EventTarget.EventTargetEvent<HTMLElement|UI.TreeOutline.TreeElement>) => void;
312313
private readonly promptElement: HTMLElement;
313314
private readonly linkifier: Components.Linkifier.Linkifier;
314315
private consoleMessages: ConsoleViewMessage[];
@@ -522,7 +523,7 @@ export class ConsoleView extends UI.Widget.VBox implements
522523

523524
this.viewportThrottler = new Common.Throttler.Throttler(viewportThrottlerTimeout);
524525
this.pendingBatchResize = false;
525-
this.onMessageResizedBound = (e: Common.EventTarget.EventTargetEvent<UI.TreeOutline.TreeElement>) => {
526+
this.onMessageResizedBound = (e: Common.EventTarget.EventTargetEvent<HTMLElement|UI.TreeOutline.TreeElement>) => {
526527
void this.onMessageResized(e);
527528
};
528529

@@ -1112,19 +1113,18 @@ export class ConsoleView extends UI.Widget.VBox implements
11121113
}
11131114
}
11141115

1115-
private async onMessageResized(event: Common.EventTarget.EventTargetEvent<UI.TreeOutline.TreeElement>):
1116+
private async onMessageResized(event: Common.EventTarget.EventTargetEvent<HTMLElement|UI.TreeOutline.TreeElement>):
11161117
Promise<void> {
1117-
const treeElement = event.data;
1118-
if (this.pendingBatchResize || !treeElement.treeOutline) {
1118+
const treeElement = event.data instanceof UI.TreeOutline.TreeElement ? event.data.treeOutline?.element : event.data;
1119+
if (this.pendingBatchResize || !treeElement) {
11191120
return;
11201121
}
11211122
this.pendingBatchResize = true;
11221123
await Promise.resolve();
1123-
const treeOutlineElement = treeElement.treeOutline.element;
11241124
this.viewport.setStickToBottom(this.isScrolledToBottom());
11251125
// Scroll, in case mutations moved the element below the visible area.
1126-
if (treeOutlineElement.offsetHeight <= this.messagesElement.offsetHeight) {
1127-
treeOutlineElement.scrollIntoViewIfNeeded();
1126+
if (treeElement.offsetHeight <= this.messagesElement.offsetHeight) {
1127+
treeElement.scrollIntoViewIfNeeded();
11281128
}
11291129

11301130
this.pendingBatchResize = false;

front_end/panels/console/ConsoleViewMessage.ts

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,8 @@ export class ConsoleViewMessage implements ConsoleViewportElement {
289289
element: HTMLElement,
290290
forceSelect: () => void,
291291
}>;
292-
private readonly messageResized: (arg0: Common.EventTarget.EventTargetEvent<UI.TreeOutline.TreeElement>) => void;
292+
private readonly messageResized:
293+
(arg0: Common.EventTarget.EventTargetEvent<HTMLElement|UI.TreeOutline.TreeElement>) => void;
293294
// The wrapper that contains consoleRowWrapper and other elements in a column.
294295
protected elementInternal: HTMLElement|null;
295296
// The element that wraps console message elements in a row.
@@ -323,7 +324,7 @@ export class ConsoleViewMessage implements ConsoleViewportElement {
323324
constructor(
324325
consoleMessage: SDK.ConsoleModel.ConsoleMessage, linkifier: Components.Linkifier.Linkifier,
325326
requestResolver: Logs.RequestResolver.RequestResolver, issueResolver: IssuesManager.IssueResolver.IssueResolver,
326-
onResize: (arg0: Common.EventTarget.EventTargetEvent<UI.TreeOutline.TreeElement>) => void) {
327+
onResize: (arg0: Common.EventTarget.EventTargetEvent<HTMLElement|UI.TreeOutline.TreeElement>) => void) {
327328
this.message = consoleMessage;
328329
this.linkifier = linkifier;
329330
this.requestResolver = requestResolver;
@@ -947,9 +948,10 @@ export class ConsoleViewMessage implements ConsoleViewportElement {
947948
if (renderResult) {
948949
if (renderResult.tree) {
949950
this.selectableChildren.push(renderResult.tree);
950-
renderResult.tree.addEventListener(UI.TreeOutline.Events.ElementAttached, this.messageResized);
951-
renderResult.tree.addEventListener(UI.TreeOutline.Events.ElementExpanded, this.messageResized);
952-
renderResult.tree.addEventListener(UI.TreeOutline.Events.ElementCollapsed, this.messageResized);
951+
const resizeObserver = new ResizeObserver(() => {
952+
this.messageResized({data: renderResult.node as HTMLElement});
953+
});
954+
resizeObserver.observe(renderResult.node as HTMLElement);
953955
}
954956
result.appendChild(renderResult.node);
955957
} else {
@@ -1967,7 +1969,8 @@ export class ConsoleGroupViewMessage extends ConsoleViewMessage {
19671969
constructor(
19681970
consoleMessage: SDK.ConsoleModel.ConsoleMessage, linkifier: Components.Linkifier.Linkifier,
19691971
requestResolver: Logs.RequestResolver.RequestResolver, issueResolver: IssuesManager.IssueResolver.IssueResolver,
1970-
onToggle: () => void, onResize: (arg0: Common.EventTarget.EventTargetEvent<UI.TreeOutline.TreeElement>) => void) {
1972+
onToggle: () => void,
1973+
onResize: (arg0: Common.EventTarget.EventTargetEvent<HTMLElement|UI.TreeOutline.TreeElement>) => void) {
19711974
console.assert(consoleMessage.isGroupStartMessage());
19721975
super(consoleMessage, linkifier, requestResolver, issueResolver, onResize);
19731976
this.collapsedInternal = consoleMessage.type === Protocol.Runtime.ConsoleAPICalledEventType.StartGroupCollapsed;
@@ -2054,7 +2057,7 @@ export class ConsoleCommand extends ConsoleViewMessage {
20542057
constructor(
20552058
consoleMessage: SDK.ConsoleModel.ConsoleMessage, linkifier: Components.Linkifier.Linkifier,
20562059
requestResolver: Logs.RequestResolver.RequestResolver, issueResolver: IssuesManager.IssueResolver.IssueResolver,
2057-
onResize: (arg0: Common.EventTarget.EventTargetEvent<UI.TreeOutline.TreeElement>) => void) {
2060+
onResize: (arg0: Common.EventTarget.EventTargetEvent<HTMLElement|UI.TreeOutline.TreeElement>) => void) {
20582061
super(consoleMessage, linkifier, requestResolver, issueResolver, onResize);
20592062
this.formattedCommand = null;
20602063
}
@@ -2116,7 +2119,7 @@ export class ConsoleTableMessageView extends ConsoleViewMessage {
21162119
constructor(
21172120
consoleMessage: SDK.ConsoleModel.ConsoleMessage, linkifier: Components.Linkifier.Linkifier,
21182121
requestResolver: Logs.RequestResolver.RequestResolver, issueResolver: IssuesManager.IssueResolver.IssueResolver,
2119-
onResize: (arg0: Common.EventTarget.EventTargetEvent<UI.TreeOutline.TreeElement>) => void) {
2122+
onResize: (arg0: Common.EventTarget.EventTargetEvent<HTMLElement|UI.TreeOutline.TreeElement>) => void) {
21202123
super(consoleMessage, linkifier, requestResolver, issueResolver, onResize);
21212124
console.assert(consoleMessage.type === Protocol.Runtime.ConsoleAPICalledEventType.Table);
21222125
this.dataGrid = null;

0 commit comments

Comments
 (0)