| 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..95e833e5a911a7f0e6c4f9f9b97bc41d9c93e1ec 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,11 @@ 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.element.addEventListener('scroll', this._popoverHelper.hidePopover.bind(this._popoverHelper), true);
|
|
|
| this._currentPerspectiveIndex = 0;
|
| this._currentPerspective = this._perspectives[0];
|
| @@ -615,12 +618,47 @@ 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) {
|
| + fulfill(false);
|
| + return;
|
| + }
|
| + ObjectUI.ObjectPopoverHelper.buildObjectPopover(result, popover).then(objectPopoverHelper => {
|
| + if (!objectPopoverHelper) {
|
| + this._onHidePopover(); // Cleanup object resolving artifacts.
|
| + fulfill(false);
|
| + return;
|
| + }
|
| + this._objectPopoverHelper = objectPopoverHelper;
|
| + fulfill(true);
|
| + });
|
| + }
|
| + }
|
| +
|
| + _onHidePopover() {
|
| + if (this._objectPopoverHelper) {
|
| + this._objectPopoverHelper.dispose();
|
| + delete this._objectPopoverHelper;
|
| + }
|
| + this._profile.target().runtimeModel.releaseObjectGroup('popover');
|
| }
|
|
|
| _updatePerspectiveOptions() {
|
|
|