Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(113)

Unified Diff: third_party/WebKit/Source/devtools/front_end/profiler/HeapSnapshotView.js

Issue 2745903003: [DevTools] Do not inherit ObjectPopoverHelper from PopoverHelper. (Closed)
Patch Set: addressed review comments Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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() {

Powered by Google App Engine
This is Rietveld 408576698