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

Unified Diff: Source/devtools/front_end/TimelinePresentationModel.js

Issue 184823002: DevTools: do not cache details node, remove linkifier from presentation record. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Review comments addressed. Created 6 years, 10 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
« no previous file with comments | « Source/devtools/front_end/TimelinePanel.js ('k') | Source/devtools/front_end/TimelineUIUtils.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/devtools/front_end/TimelinePresentationModel.js
diff --git a/Source/devtools/front_end/TimelinePresentationModel.js b/Source/devtools/front_end/TimelinePresentationModel.js
index a073c90453c9797c25ecbe85fcc5c80c55d85190..314eee827696a462612ce1b0f7d58b47c07d5b21 100644
--- a/Source/devtools/front_end/TimelinePresentationModel.js
+++ b/Source/devtools/front_end/TimelinePresentationModel.js
@@ -35,7 +35,6 @@
*/
WebInspector.TimelinePresentationModel = function()
{
- this._linkifier = new WebInspector.Linkifier();
this._filters = [];
this.reset();
}
@@ -115,7 +114,6 @@ WebInspector.TimelinePresentationModel.prototype = {
reset: function()
{
- this._linkifier.reset();
this._rootRecord = new WebInspector.TimelinePresentationModel.Record(this, { type: WebInspector.TimelineModel.RecordType.Root }, null);
this._sendRequestRecords = {};
this._timerRecords = {};
@@ -422,7 +420,6 @@ WebInspector.TimelinePresentationModel.prototype = {
WebInspector.TimelinePresentationModel.Record = function(presentationModel, record, parentRecord)
{
this._presentationModel = presentationModel;
- this._linkifier = presentationModel._linkifier;
this._aggregatedStats = {};
this._record = /** @type {!TimelineAgent.TimelineEvent} */ (record);
this._children = [];
@@ -460,13 +457,8 @@ WebInspector.TimelinePresentationModel.Record = function(presentationModel, reco
case recordTypes.ResourceReceiveResponse:
var sendRequestRecord = presentationModel._sendRequestRecords[record.data["requestId"]];
- if (sendRequestRecord) { // False if we started instrumentation in the middle of request.
+ if (sendRequestRecord) // False if we started instrumentation in the middle of request.
this.url = sendRequestRecord.url;
- // Now that we have resource in the collection, recalculate details in order to display short url.
- sendRequestRecord._refreshDetails();
- if (sendRequestRecord.parent !== presentationModel._rootRecord && sendRequestRecord.parent.type === recordTypes.ScheduleResourceRequest)
- sendRequestRecord.parent._refreshDetails();
- }
break;
case recordTypes.ResourceReceivedData:
@@ -640,7 +632,7 @@ WebInspector.TimelinePresentationModel.Record.prototype = {
/**
* @return {string}
*/
- get title()
+ title: function()
{
return WebInspector.TimelineUIUtils.recordTitle(this._presentationModel, this._record);
},
@@ -728,9 +720,10 @@ WebInspector.TimelinePresentationModel.Record.prototype = {
},
/**
+ * @param {!WebInspector.Linkifier} linkifier
* @param {function(!DocumentFragment)} callback
*/
- generatePopupContent: function(callback)
+ generatePopupContent: function(linkifier, callback)
{
var barrier = new CallbackBarrier();
if (WebInspector.TimelineUIUtils.needsPreviewElement(this.type) && !this._imagePreviewElement)
@@ -745,7 +738,7 @@ WebInspector.TimelinePresentationModel.Record.prototype = {
*/
function callbackWrapper()
{
- callback(this._generatePopupContentSynchronously());
+ callback(this._generatePopupContentSynchronously(linkifier));
}
},
@@ -789,9 +782,10 @@ WebInspector.TimelinePresentationModel.Record.prototype = {
},
/**
+ * @param {!WebInspector.Linkifier} linkifier
* @return {!DocumentFragment}
*/
- _generatePopupContentSynchronously: function()
+ _generatePopupContentSynchronously: function(linkifier)
{
var fragment = document.createDocumentFragment();
if (!this.coalesced && this._children.length)
@@ -809,7 +803,7 @@ WebInspector.TimelinePresentationModel.Record.prototype = {
var callStackLabel;
var relatedNodeLabel;
- var contentHelper = new WebInspector.TimelineDetailsContentHelper(true);
+ var contentHelper = new WebInspector.TimelineDetailsContentHelper(linkifier, true);
contentHelper.appendTextRow(WebInspector.UIString("Self Time"), Number.millisToString(this._selfTime, true));
contentHelper.appendTextRow(WebInspector.UIString("Start Time"), Number.millisToString(this._startTimeOffset));
@@ -835,7 +829,7 @@ WebInspector.TimelinePresentationModel.Record.prototype = {
break;
case recordTypes.FunctionCall:
if (this.scriptName)
- contentHelper.appendElementRow(WebInspector.UIString("Location"), this._linkifyLocation(this.scriptName, this.scriptLine, 0));
+ contentHelper.appendLocationRow(WebInspector.UIString("Location"), this.scriptName, this.scriptLine);
break;
case recordTypes.ScheduleResourceRequest:
case recordTypes.ResourceSendRequest:
@@ -856,7 +850,7 @@ WebInspector.TimelinePresentationModel.Record.prototype = {
break;
case recordTypes.EvaluateScript:
if (this.data && this.url)
- contentHelper.appendElementRow(WebInspector.UIString("Script"), this._linkifyLocation(this.url, this.data["lineNumber"]));
+ contentHelper.appendLocationRow(WebInspector.UIString("Script"), this.url, this.data["lineNumber"]);
break;
case recordTypes.Paint:
var clip = this.data["clip"];
@@ -924,8 +918,9 @@ WebInspector.TimelinePresentationModel.Record.prototype = {
contentHelper.appendTextRow(WebInspector.UIString("Callback Function"), this.embedderCallbackName);
break;
default:
- if (this.detailsNode())
- contentHelper.appendElementRow(WebInspector.UIString("Details"), this.detailsNode().childNodes[1].cloneNode());
+ var detailsNode = this.buildDetailsNode(linkifier);
+ if (detailsNode)
+ contentHelper.appendElementRow(WebInspector.UIString("Details"), detailsNode);
break;
}
@@ -933,7 +928,7 @@ WebInspector.TimelinePresentationModel.Record.prototype = {
contentHelper.appendElementRow(relatedNodeLabel || WebInspector.UIString("Related node"), this._createNodeAnchor(this._relatedNode));
if (this.scriptName && this.type !== recordTypes.FunctionCall)
- contentHelper.appendElementRow(WebInspector.UIString("Function Call"), this._linkifyLocation(this.scriptName, this.scriptLine, 0));
+ contentHelper.appendLocationRow(WebInspector.UIString("Function Call"), this.scriptName, this.scriptLine);
if (this.jsHeapSizeUsed) {
if (this.usedHeapSizeDelta) {
@@ -945,10 +940,10 @@ WebInspector.TimelinePresentationModel.Record.prototype = {
}
if (this.callSiteStackTrace)
- contentHelper.appendStackTrace(callSiteStackTraceLabel || WebInspector.UIString("Call Site stack"), this.callSiteStackTrace, this._linkifyCallFrame.bind(this));
+ contentHelper.appendStackTrace(callSiteStackTraceLabel || WebInspector.UIString("Call Site stack"), this.callSiteStackTrace);
if (this.stackTrace)
- contentHelper.appendStackTrace(callStackLabel || WebInspector.UIString("Call Stack"), this.stackTrace, this._linkifyCallFrame.bind(this));
+ contentHelper.appendStackTrace(callStackLabel || WebInspector.UIString("Call Stack"), this.stackTrace);
if (this._warnings) {
var ul = document.createElement("ul");
@@ -972,27 +967,6 @@ WebInspector.TimelinePresentationModel.Record.prototype = {
return span;
},
- _refreshDetails: function()
- {
- delete this._detailsNode;
- },
-
- /**
- * @return {?Node}
- */
- detailsNode: function()
- {
- if (typeof this._detailsNode === "undefined") {
- this._detailsNode = this._getRecordDetails();
-
- if (this._detailsNode && !this.coalesced) {
- this._detailsNode.insertBefore(document.createTextNode("("), this._detailsNode.firstChild);
- this._detailsNode.appendChild(document.createTextNode(")"));
- }
- }
- return this._detailsNode;
- },
-
_createSpanWithText: function(textContent)
{
var node = document.createElement("span");
@@ -1001,51 +975,57 @@ WebInspector.TimelinePresentationModel.Record.prototype = {
},
/**
+ * @param {!WebInspector.Linkifier} linkifier
* @return {?Node}
*/
- _getRecordDetails: function()
+ buildDetailsNode: function(linkifier)
{
var details;
+ var detailsText;
if (this.coalesced)
return this._createSpanWithText(WebInspector.UIString("× %d", this.children.length));
switch (this.type) {
case WebInspector.TimelineModel.RecordType.GCEvent:
- details = WebInspector.UIString("%s collected", Number.bytesToString(this.data["usedHeapSizeDelta"]));
+ detailsText = WebInspector.UIString("%s collected", Number.bytesToString(this.data["usedHeapSizeDelta"]));
break;
case WebInspector.TimelineModel.RecordType.TimerFire:
- details = this._linkifyScriptLocation(this.data["timerId"]);
+ details = this._linkifyScriptLocation(linkifier);
+ detailsText = this.data["timerId"];
break;
case WebInspector.TimelineModel.RecordType.FunctionCall:
if (this.scriptName)
- details = this._linkifyLocation(this.scriptName, this.scriptLine, 0);
+ details = this._linkifyLocation(linkifier, this.scriptName, this.scriptLine, 0);
break;
case WebInspector.TimelineModel.RecordType.FireAnimationFrame:
- details = this._linkifyScriptLocation(this.data["id"]);
+ details = this._linkifyScriptLocation(linkifier);
+ detailsText = this.data["id"];
break;
case WebInspector.TimelineModel.RecordType.EventDispatch:
- details = this.data ? this.data["type"] : null;
+ detailsText = this.data ? this.data["type"] : null;
break;
case WebInspector.TimelineModel.RecordType.Paint:
var width = this.data.clip ? WebInspector.TimelinePresentationModel.quadWidth(this.data.clip) : this.data.width;
var height = this.data.clip ? WebInspector.TimelinePresentationModel.quadHeight(this.data.clip) : this.data.height;
if (width && height)
- details = WebInspector.UIString("%d\u2009\u00d7\u2009%d", width, height);
+ detailsText = WebInspector.UIString("%d\u2009\u00d7\u2009%d", width, height);
break;
case WebInspector.TimelineModel.RecordType.TimerInstall:
case WebInspector.TimelineModel.RecordType.TimerRemove:
- details = this._linkifyTopCallFrame(this.data["timerId"]);
+ details = this._linkifyTopCallFrame(linkifier);
+ detailsText = this.data["timerId"];
break;
case WebInspector.TimelineModel.RecordType.RequestAnimationFrame:
case WebInspector.TimelineModel.RecordType.CancelAnimationFrame:
- details = this._linkifyTopCallFrame(this.data["id"]);
+ details = this._linkifyTopCallFrame(linkifier);
+ detailsText = this.data["id"];
break;
case WebInspector.TimelineModel.RecordType.ParseHTML:
case WebInspector.TimelineModel.RecordType.RecalculateStyles:
- details = this._linkifyTopCallFrame();
+ details = this._linkifyTopCallFrame(linkifier);
break;
case WebInspector.TimelineModel.RecordType.EvaluateScript:
- details = this.url ? this._linkifyLocation(this.url, this.data["lineNumber"], 0) : null;
+ details = this.url ? this._linkifyLocation(linkifier, this.url, this.data["lineNumber"], 0) : null;
break;
case WebInspector.TimelineModel.RecordType.XHRReadyStateChange:
case WebInspector.TimelineModel.RecordType.XHRLoad:
@@ -1056,68 +1036,66 @@ WebInspector.TimelinePresentationModel.Record.prototype = {
case WebInspector.TimelineModel.RecordType.ResourceFinish:
case WebInspector.TimelineModel.RecordType.DecodeImage:
case WebInspector.TimelineModel.RecordType.ResizeImage:
- details = WebInspector.displayNameForURL(this.url);
+ detailsText = WebInspector.displayNameForURL(this.url);
break;
case WebInspector.TimelineModel.RecordType.ConsoleTime:
- details = this.data["message"];
+ detailsText = this.data["message"];
break;
case WebInspector.TimelineModel.RecordType.EmbedderCallback:
- details = this.data["callbackName"];
+ detailsText = this.data["callbackName"];
break;
default:
- details = this.scriptName ? this._linkifyLocation(this.scriptName, this.scriptLine, 0) : (this._linkifyTopCallFrame() || null);
+ details = this.scriptName ? this._linkifyLocation(linkifier, this.scriptName, this.scriptLine, 0) : (this._linkifyTopCallFrame(linkifier) || null);
break;
}
- if (details) {
- if (details instanceof Node)
- details.tabIndex = -1;
- else
- return this._createSpanWithText("" + details);
- }
-
- return details || null;
+ if (!details && detailsText)
+ details = document.createTextNode(detailsText);
+ return details;
},
/**
+ * @param {!WebInspector.Linkifier} linkifier
* @param {string} url
* @param {number} lineNumber
* @param {number=} columnNumber
*/
- _linkifyLocation: function(url, lineNumber, columnNumber)
+ _linkifyLocation: function(linkifier, url, lineNumber, columnNumber)
{
// FIXME(62725): stack trace line/column numbers are one-based.
columnNumber = columnNumber ? columnNumber - 1 : 0;
- return this._linkifier.linkifyLocation(url, lineNumber - 1, columnNumber, "timeline-details");
+ return linkifier.linkifyLocation(url, lineNumber - 1, columnNumber, "timeline-details");
},
/**
+ * @param {!WebInspector.Linkifier} linkifier
* @param {!ConsoleAgent.CallFrame} callFrame
*/
- _linkifyCallFrame: function(callFrame)
+ _linkifyCallFrame: function(linkifier, callFrame)
{
- return this._linkifyLocation(callFrame.url, callFrame.lineNumber, callFrame.columnNumber);
+ return this._linkifyLocation(linkifier, callFrame.url, callFrame.lineNumber, callFrame.columnNumber);
},
/**
- * @param {string=} defaultValue
+ * @param {!WebInspector.Linkifier} linkifier
+ * @return {?Element}
*/
- _linkifyTopCallFrame: function(defaultValue)
+ _linkifyTopCallFrame: function(linkifier)
{
if (this.stackTrace)
- return this._linkifyCallFrame(this.stackTrace[0]);
+ return this._linkifyCallFrame(linkifier, this.stackTrace[0]);
if (this.callSiteStackTrace)
- return this._linkifyCallFrame(this.callSiteStackTrace[0]);
- return defaultValue;
+ return this._linkifyCallFrame(linkifier, this.callSiteStackTrace[0]);
+ return null;
},
/**
- * @param {*} defaultValue
- * @return {!Element|string}
+ * @param {!WebInspector.Linkifier} linkifier
+ * @return {?Element}
*/
- _linkifyScriptLocation: function(defaultValue)
+ _linkifyScriptLocation: function(linkifier)
{
- return this.scriptName ? this._linkifyLocation(this.scriptName, this.scriptLine, 0) : "" + defaultValue;
+ return this.scriptName ? this._linkifyLocation(linkifier, this.scriptName, this.scriptLine, 0) : null;
},
calculateAggregatedStats: function()
@@ -1175,10 +1153,9 @@ WebInspector.TimelinePresentationModel.Record.prototype = {
*/
testContentMatching: function(regExp)
{
- var toSearchText = this.title;
- if (this.detailsNode())
- toSearchText += " " + this.detailsNode().textContent;
- return regExp.test(toSearchText);
+ var tokens = Object.values(this._record.data);
+ tokens.push(this.title());
+ return regExp.test(tokens.join("|"));
}
}
« no previous file with comments | « Source/devtools/front_end/TimelinePanel.js ('k') | Source/devtools/front_end/TimelineUIUtils.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698