Index: third_party/WebKit/Source/devtools/front_end/profiler/HeapSnapshotView.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/profiler/HeapSnapshotView.js b/third_party/WebKit/Source/devtools/front_end/profiler/HeapSnapshotView.js |
index 5d0d91504e3f3655f4c69f78fecb5e89a8283114..951d2fbc87a3702ec402e32ba5d48da66fc9bd10 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/profiler/HeapSnapshotView.js |
+++ b/third_party/WebKit/Source/devtools/front_end/profiler/HeapSnapshotView.js |
@@ -153,8 +153,12 @@ Profiler.HeapSnapshotView = class extends UI.SimpleView { |
this._selectedSizeText = new UI.ToolbarText(); |
- this._popoverHelper = new ObjectUI.ObjectPopoverHelper( |
- this.element, this._getHoverAnchor.bind(this), this._resolveObjectForPopover.bind(this), undefined, true); |
+ this._popoverHelper = new UI.PopoverHelper(this.element, true); |
+ this._popoverHelper.initializeCallbacks( |
+ this._getHoverAnchor.bind(this), this._showObjectPopover.bind(this), this._onHidePopover.bind(this)); |
+ this._popoverHelper.setHasPadding(true); |
+ this._objectPopoverHelper = new ObjectUI.ObjectPopoverHelper(); |
+ this.element.addEventListener('scroll', this._popoverHelper.hidePopover.bind(this._popoverHelper), true); |
this._currentPerspectiveIndex = 0; |
this._currentPerspective = this._perspectives[0]; |
@@ -615,12 +619,35 @@ Profiler.HeapSnapshotView = class extends UI.SimpleView { |
return span; |
} |
- _resolveObjectForPopover(element, showCallback, objectGroupName) { |
- if (!this._profile.target()) |
- return; |
- if (!element.node) |
- return; |
- element.node.queryObjectContent(this._profile.target(), showCallback, objectGroupName); |
+ /** |
+ * @param {!Element|!AnchorBox} element |
+ * @param {!UI.GlassPane} popover |
+ * @return {!Promise<boolean>} |
+ */ |
+ _showObjectPopover(element, popover) { |
+ if (!this._profile.target() || !element.node) |
+ return Promise.resolve(false); |
+ |
+ var fulfill; |
+ var promise = new Promise(x => fulfill = x); |
+ element.node.queryObjectContent(this._profile.target(), onObjectResolved.bind(this), 'popover'); |
+ return promise; |
+ |
+ /** |
+ * @param {?SDK.RemoteObject} result |
+ * @this {Profiler.HeapSnapshotView} |
+ */ |
+ function onObjectResolved(result) { |
+ if (result) |
+ this._objectPopoverHelper.buildObjectPopover(result, popover).then(fulfill); |
+ else |
+ fulfill(false); |
+ } |
+ } |
+ |
+ _onHidePopover() { |
+ this._objectPopoverHelper.dispose(); |
+ this._profile.target().runtimeModel.releaseObjectGroup('popover'); |
} |
_updatePerspectiveOptions() { |