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

Unified Diff: Source/devtools/front_end/timeline/TimelineModelImpl.js

Issue 313333002: Extract implementation based on timeline events into TimelineModelImpl (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 6 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: Source/devtools/front_end/timeline/TimelineModelImpl.js
diff --git a/Source/devtools/front_end/timeline/TimelineModel.js b/Source/devtools/front_end/timeline/TimelineModelImpl.js
similarity index 52%
copy from Source/devtools/front_end/timeline/TimelineModel.js
copy to Source/devtools/front_end/timeline/TimelineModelImpl.js
index f913ee67db964d32260343be6cb8cdccd43f0847..7411d5d1aaa7ee565a6559b3598069b62a14070b 100644
--- a/Source/devtools/front_end/timeline/TimelineModel.js
+++ b/Source/devtools/front_end/timeline/TimelineModelImpl.js
@@ -1,43 +1,18 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
/**
* @constructor
- * @extends {WebInspector.Object}
+ * @extends {WebInspector.TimelineModel}
* @param {!WebInspector.TimelineManager} timelineManager
*/
-WebInspector.TimelineModel = function(timelineManager)
+WebInspector.TimelineModelImpl = function(timelineManager)
{
+ WebInspector.TimelineModel.call(this, timelineManager.target());
this._timelineManager = timelineManager;
this._filters = [];
- this._bindings = new WebInspector.TimelineModel.InterRecordBindings();
+ this._bindings = new WebInspector.TimelineModelImpl.InterRecordBindings();
this.reset();
@@ -47,119 +22,9 @@ WebInspector.TimelineModel = function(timelineManager)
this._timelineManager.addEventListener(WebInspector.TimelineManager.EventTypes.TimelineProgress, this._onProgress, this);
}
-WebInspector.TimelineModel.TransferChunkLengthBytes = 5000000;
-
-WebInspector.TimelineModel.RecordType = {
- Root: "Root",
- Program: "Program",
- EventDispatch: "EventDispatch",
-
- GPUTask: "GPUTask",
-
- RequestMainThreadFrame: "RequestMainThreadFrame",
- BeginFrame: "BeginFrame",
- ActivateLayerTree: "ActivateLayerTree",
- DrawFrame: "DrawFrame",
- ScheduleStyleRecalculation: "ScheduleStyleRecalculation",
- RecalculateStyles: "RecalculateStyles",
- InvalidateLayout: "InvalidateLayout",
- Layout: "Layout",
- UpdateLayerTree: "UpdateLayerTree",
- PaintSetup: "PaintSetup",
- Paint: "Paint",
- Rasterize: "Rasterize",
- ScrollLayer: "ScrollLayer",
- DecodeImage: "DecodeImage",
- ResizeImage: "ResizeImage",
- CompositeLayers: "CompositeLayers",
-
- ParseHTML: "ParseHTML",
-
- TimerInstall: "TimerInstall",
- TimerRemove: "TimerRemove",
- TimerFire: "TimerFire",
-
- XHRReadyStateChange: "XHRReadyStateChange",
- XHRLoad: "XHRLoad",
- EvaluateScript: "EvaluateScript",
-
- MarkLoad: "MarkLoad",
- MarkDOMContent: "MarkDOMContent",
- MarkFirstPaint: "MarkFirstPaint",
-
- TimeStamp: "TimeStamp",
- ConsoleTime: "ConsoleTime",
-
- ResourceSendRequest: "ResourceSendRequest",
- ResourceReceiveResponse: "ResourceReceiveResponse",
- ResourceReceivedData: "ResourceReceivedData",
- ResourceFinish: "ResourceFinish",
-
- FunctionCall: "FunctionCall",
- GCEvent: "GCEvent",
- JSFrame: "JSFrame",
-
- UpdateCounters: "UpdateCounters",
-
- RequestAnimationFrame: "RequestAnimationFrame",
- CancelAnimationFrame: "CancelAnimationFrame",
- FireAnimationFrame: "FireAnimationFrame",
-
- WebSocketCreate : "WebSocketCreate",
- WebSocketSendHandshakeRequest : "WebSocketSendHandshakeRequest",
- WebSocketReceiveHandshakeResponse : "WebSocketReceiveHandshakeResponse",
- WebSocketDestroy : "WebSocketDestroy",
-
- EmbedderCallback : "EmbedderCallback",
-}
-
-WebInspector.TimelineModel.Events = {
- RecordAdded: "RecordAdded",
- RecordsCleared: "RecordsCleared",
- RecordingStarted: "RecordingStarted",
- RecordingStopped: "RecordingStopped",
- RecordingProgress: "RecordingProgress",
- RecordFilterChanged: "RecordFilterChanged"
-}
-
-/**
- * @param {!Array.<!WebInspector.TimelineModel.Record>} recordsArray
- * @param {?function(!WebInspector.TimelineModel.Record)|?function(!WebInspector.TimelineModel.Record,number)} preOrderCallback
- * @param {function(!WebInspector.TimelineModel.Record)|function(!WebInspector.TimelineModel.Record,number)=} postOrderCallback
- * @return {boolean}
- */
-WebInspector.TimelineModel.forAllRecords = function(recordsArray, preOrderCallback, postOrderCallback)
-{
- /**
- * @param {!Array.<!WebInspector.TimelineModel.Record>} records
- * @param {number} depth
- * @return {boolean}
- */
- function processRecords(records, depth)
- {
- for (var i = 0; i < records.length; ++i) {
- var record = records[i];
- if (preOrderCallback && preOrderCallback(record, depth))
- return true;
- if (processRecords(record.children(), depth + 1))
- return true;
- if (postOrderCallback && postOrderCallback(record, depth))
- return true;
- }
- return false;
- }
- return processRecords(recordsArray, 0);
-}
-
-WebInspector.TimelineModel.prototype = {
- /**
- * @return {!WebInspector.Target}
- */
- target: function()
- {
- return this._timelineManager.target();
- },
+WebInspector.TimelineModelImpl.TransferChunkLengthBytes = 5000000;
+WebInspector.TimelineModelImpl.prototype = {
/**
* @return {boolean}
*/
@@ -169,72 +34,6 @@ WebInspector.TimelineModel.prototype = {
},
/**
- * @param {?function(!WebInspector.TimelineModel.Record)|?function(!WebInspector.TimelineModel.Record,number)} preOrderCallback
- * @param {function(!WebInspector.TimelineModel.Record)|function(!WebInspector.TimelineModel.Record,number)=} postOrderCallback
- */
- forAllRecords: function(preOrderCallback, postOrderCallback)
- {
- WebInspector.TimelineModel.forAllRecords(this._records, preOrderCallback, postOrderCallback);
- },
-
- /**
- * @param {!WebInspector.TimelineModel.Filter} filter
- */
- addFilter: function(filter)
- {
- this._filters.push(filter);
- filter._model = this;
- },
-
- /**
- * @param {function(!WebInspector.TimelineModel.Record)|function(!WebInspector.TimelineModel.Record,number)} callback
- */
- forAllFilteredRecords: function(callback)
- {
- /**
- * @param {!WebInspector.TimelineModel.Record} record
- * @param {number} depth
- * @this {WebInspector.TimelineModel}
- * @return {boolean}
- */
- function processRecord(record, depth)
- {
- var visible = this.isVisible(record);
- if (visible) {
- if (callback(record, depth))
- return true;
- }
-
- for (var i = 0; i < record.children().length; ++i) {
- if (processRecord.call(this, record.children()[i], visible ? depth + 1 : depth))
- return true;
- }
- return false;
- }
-
- for (var i = 0; i < this._records.length; ++i)
- processRecord.call(this, this._records[i], 0);
- },
-
- /**
- * @param {!WebInspector.TimelineModel.Record} record
- * @return {boolean}
- */
- isVisible: function(record)
- {
- for (var i = 0; i < this._filters.length; ++i) {
- if (!this._filters[i].accept(record))
- return false;
- }
- return true;
- },
-
- _filterChanged: function()
- {
- this.dispatchEventToListeners(WebInspector.TimelineModel.Events.RecordFilterChanged);
- },
-
- /**
* @param {boolean} captureStacks
* @param {boolean} captureMemory
*/
@@ -262,7 +61,7 @@ WebInspector.TimelineModel.prototype = {
/**
* Console started this one and we are just sniffing it. Initiate recording so that we
* could stop it.
- * @this {WebInspector.TimelineModel}
+ * @this {WebInspector.TimelineModelImpl}
*/
function stopTimeline()
{
@@ -273,52 +72,6 @@ WebInspector.TimelineModel.prototype = {
this._timelineManager.stop(this._fireRecordingStopped.bind(this));
},
- willStartRecordingTraceEvents: function()
- {
- this.reset();
- this._fireRecordingStarted();
- },
-
- /**
- * @param {!Array.<!WebInspector.TracingModel.Event>} mainThreadEvents
- */
- didStopRecordingTraceEvents: function(mainThreadEvents)
- {
- var recordStack = [];
- for (var i = 0, size = mainThreadEvents.length; i < size; ++i) {
- var event = mainThreadEvents[i];
- while (recordStack.length) {
- var top = recordStack.peekLast();
- if (top._event.endTime >= event.startTime)
- break;
- recordStack.pop();
- }
- var parentRecord = recordStack.peekLast() || null;
- var record = new WebInspector.TimelineModel.TraceEventRecord(this, event, parentRecord);
- if (WebInspector.TimelineUIUtils.isEventDivider(record))
- this._eventDividerRecords.push(record);
- if (!recordStack.length)
- this._addTopLevelRecord(record);
- if (event.endTime)
- recordStack.push(record);
- }
- this._fireRecordingStopped(null, null);
- },
-
- /**
- * @param {!WebInspector.TimelineModel.TraceEventRecord} record
- */
- _addTopLevelRecord: function(record)
- {
- this._updateBoundaries(record);
- this._records.push(record);
- if (record.type() === WebInspector.TimelineModel.RecordType.Program)
- this._mainThreadTasks.push(record);
- if (record.type() === WebInspector.TimelineModel.RecordType.GPUTask)
- this._gpuThreadTasks.push(record);
- this.dispatchEventToListeners(WebInspector.TimelineModel.Events.RecordAdded, record);
- },
-
/**
* @return {!Array.<!WebInspector.TimelineModel.Record>}
*/
@@ -459,7 +212,7 @@ WebInspector.TimelineModel.prototype = {
_createFileReader: function(file, delegate)
{
- return new WebInspector.ChunkedFileReader(file, WebInspector.TimelineModel.TransferChunkLengthBytes, delegate);
+ return new WebInspector.ChunkedFileReader(file, WebInspector.TimelineModelImpl.TransferChunkLengthBytes, delegate);
},
_createFileWriter: function()
@@ -475,7 +228,7 @@ WebInspector.TimelineModel.prototype = {
/**
* @param {boolean} accepted
- * @this {WebInspector.TimelineModel}
+ * @this {WebInspector.TimelineModelImpl}
*/
function callback(accepted)
{
@@ -490,73 +243,10 @@ WebInspector.TimelineModel.prototype = {
reset: function()
{
this._loadedFromFile = false;
- this._records = [];
this._payloads = [];
this._stringPool = {};
- this._minimumRecordTime = -1;
- this._maximumRecordTime = -1;
this._bindings._reset();
- /** @type {!Array.<!WebInspector.TimelineModel.Record>} */
- this._mainThreadTasks = [];
- /** @type {!Array.<!WebInspector.TimelineModel.Record>} */
- this._gpuThreadTasks = [];
- /** @type {!Array.<!WebInspector.TimelineModel.Record>} */
- this._eventDividerRecords = [];
- this.dispatchEventToListeners(WebInspector.TimelineModel.Events.RecordsCleared);
- },
-
- /**
- * @return {number}
- */
- minimumRecordTime: function()
- {
- return this._minimumRecordTime;
- },
-
- /**
- * @return {number}
- */
- maximumRecordTime: function()
- {
- return this._maximumRecordTime;
- },
-
- /**
- * @param {!WebInspector.TimelineModel.Record} record
- */
- _updateBoundaries: function(record)
- {
- var startTime = record.startTime();
- var endTime = record.endTime();
-
- if (this._minimumRecordTime === -1 || startTime < this._minimumRecordTime)
- this._minimumRecordTime = startTime;
- if ((this._maximumRecordTime === -1 && endTime) || endTime > this._maximumRecordTime)
- this._maximumRecordTime = endTime;
- },
-
- /**
- * @return {!Array.<!WebInspector.TimelineModel.Record>}
- */
- mainThreadTasks: function()
- {
- return this._mainThreadTasks;
- },
-
- /**
- * @return {!Array.<!WebInspector.TimelineModel.Record>}
- */
- gpuThreadTasks: function()
- {
- return this._gpuThreadTasks;
- },
-
- /**
- * @return {!Array.<!WebInspector.TimelineModel.Record>}
- */
- eventDividerRecords: function()
- {
- return this._eventDividerRecords;
+ WebInspector.TimelineModel.prototype.reset.call(this);
},
/**
@@ -581,18 +271,18 @@ WebInspector.TimelineModel.prototype = {
this._internStrings(children[i]);
},
- __proto__: WebInspector.Object.prototype
+ __proto__: WebInspector.TimelineModel.prototype
}
/**
* @constructor
*/
-WebInspector.TimelineModel.InterRecordBindings = function() {
+WebInspector.TimelineModelImpl.InterRecordBindings = function() {
this._reset();
}
-WebInspector.TimelineModel.InterRecordBindings.prototype = {
+WebInspector.TimelineModelImpl.InterRecordBindings.prototype = {
_reset: function()
{
this._sendRequestRecords = {};
@@ -605,328 +295,6 @@ WebInspector.TimelineModel.InterRecordBindings.prototype = {
}
/**
- * @interface
- */
-WebInspector.TimelineModel.Record = function()
-{
-}
-
-WebInspector.TimelineModel.Record.prototype = {
- /**
- * @return {?Array.<!ConsoleAgent.CallFrame>}
- */
- callSiteStackTrace: function() { },
-
- /**
- * @return {?WebInspector.TimelineModel.Record}
- */
- initiator: function() { },
-
- /**
- * @return {!WebInspector.Target}
- */
- target: function() { },
-
- /**
- * @return {number}
- */
- selfTime: function() { },
-
- /**
- * @return {!Array.<!WebInspector.TimelineModel.Record>}
- */
- children: function() { },
-
- /**
- * @return {!WebInspector.TimelineCategory}
- */
- category: function() { },
-
- /**
- * @return {string}
- */
- title: function() { },
-
- /**
- * @return {number}
- */
- startTime: function() { },
-
- /**
- * @return {string|undefined}
- */
- thread: function() { },
-
- /**
- * @return {number}
- */
- endTime: function() { },
-
- /**
- * @param {number} endTime
- */
- setEndTime: function(endTime) { },
-
- /**
- * @return {!Object}
- */
- data: function() { },
-
- /**
- * @return {string}
- */
- type: function() { },
-
- /**
- * @return {string}
- */
- frameId: function() { },
-
- /**
- * @return {?Array.<!ConsoleAgent.CallFrame>}
- */
- stackTrace: function() { },
-
- /**
- * @param {string} key
- * @return {?Object}
- */
- getUserObject: function(key) { },
-
- /**
- * @param {string} key
- * @param {?Object|undefined} value
- */
- setUserObject: function(key, value) { },
-
- /**
- * @return {!Object.<string, number>}
- */
- aggregatedStats: function() { },
-
- /**
- * @return {?Array.<string>}
- */
- warnings: function() { },
-
- /**
- * @param {!RegExp} regExp
- * @return {boolean}
- */
- testContentMatching: function(regExp) { }
-}
-
-
-/**
- * @constructor
- * @implements {WebInspector.TimelineModel.Record}
- * @param {!WebInspector.TimelineModel} model
- * @param {!WebInspector.TracingModel.Event} traceEvent
- * @param {?WebInspector.TimelineModel.TraceEventRecord} parentRecord
- */
-WebInspector.TimelineModel.TraceEventRecord = function(model, traceEvent, parentRecord)
-{
- this._model = model;
- this._event = traceEvent;
- traceEvent._timelineRecord = this;
- if (parentRecord) {
- this.parent = parentRecord;
- parentRecord._children.push(this);
- }
- this._children = [];
-}
-
-WebInspector.TimelineModel.TraceEventRecord.prototype = {
- /**
- * @return {?Array.<!ConsoleAgent.CallFrame>}
- */
- callSiteStackTrace: function()
- {
- var initiator = this._event.initiator;
- return initiator ? initiator.stackTrace : null;
- },
-
- /**
- * @return {?WebInspector.TimelineModel.Record}
- */
- initiator: function()
- {
- var initiator = this._event.initiator;
- return initiator ? initiator._timelineRecord : null;
- },
-
- /**
- * @return {!WebInspector.Target}
- */
- target: function()
- {
- return this._model.target();
- },
-
- /**
- * @return {number}
- */
- selfTime: function()
- {
- return this._event.selfTime / 1000;
- },
-
- /**
- * @return {!Array.<!WebInspector.TimelineModel.Record>}
- */
- children: function()
- {
- return this._children;
- },
-
- /**
- * @return {!WebInspector.TimelineCategory}
- */
- category: function()
- {
- var style = WebInspector.TimelineUIUtils.styleForTimelineEvent(this._event.name);
- return style.category;
- },
-
- /**
- * @return {string}
- */
- title: function()
- {
- return WebInspector.TimelineUIUtils.recordTitle(this, this._model);
- },
-
- /**
- * @return {number}
- */
- startTime: function()
- {
- return this._event.startTime / 1000;
- },
-
- /**
- * @return {string|undefined}
- */
- thread: function()
- {
- return "CPU";
- },
-
- /**
- * @return {number}
- */
- endTime: function()
- {
- return (this._event.endTime || this._event.startTime) / 1000;
- },
-
- /**
- * @param {number} endTime
- */
- setEndTime: function(endTime)
- {
- throw new Error("Unsupported operation setEndTime");
- },
-
- /**
- * @return {!Object}
- */
- data: function()
- {
- return this._event.args.data;
- },
-
- /**
- * @return {string}
- */
- type: function()
- {
- return this._event.name;
- },
-
- /**
- * @return {string}
- */
- frameId: function()
- {
- switch (this._event.name) {
- case WebInspector.TracingTimelineModel.RecordType.ScheduleStyleRecalculation:
- case WebInspector.TracingTimelineModel.RecordType.RecalculateStyles:
- case WebInspector.TracingTimelineModel.RecordType.InvalidateLayout:
- return this._event.args["frameId"];
- case WebInspector.TracingTimelineModel.RecordType.Layout:
- return this._event.args["beginData"]["frameId"];
- default:
- var data = this._event.args.data;
- return (data && data["frame"]) || "";
- }
- },
-
- /**
- * @return {?Array.<!ConsoleAgent.CallFrame>}
- */
- stackTrace: function()
- {
- return this._event.stackTrace;
- },
-
- /**
- * @param {string} key
- * @return {?Object}
- */
- getUserObject: function(key)
- {
- if (key === "TimelineUIUtils::preview-element")
- return this._event.previewElement;
- throw new Error("Unexpected key: " + key);
- },
-
- /**
- * @param {string} key
- * @param {?Object|undefined} value
- */
- setUserObject: function(key, value)
- {
- if (key !== "TimelineUIUtils::preview-element")
- throw new Error("Unexpected key: " + key);
- this._event.previewElement = /** @type {?Element} */ (value);
- },
-
- /**
- * @return {!Object.<string, number>}
- */
- aggregatedStats: function()
- {
- return {};
- },
-
- /**
- * @return {?Array.<string>}
- */
- warnings: function()
- {
- if (this._event.warning)
- return [this._event.warning];
- return null;
- },
-
- /**
- * @param {!RegExp} regExp
- * @return {boolean}
- */
- testContentMatching: function(regExp)
- {
- var tokens = [this.title()];
- var data = this._event.args.data;
- if (data) {
- for (var key in data)
- tokens.push(data[key]);
- }
- return regExp.test(tokens.join("|"));
- }
-}
-
-/**
* @constructor
* @implements {WebInspector.TimelineModel.Record}
* @param {!WebInspector.TimelineModel} model
@@ -1210,31 +578,6 @@ WebInspector.TimelineModel.RecordImpl.prototype = {
/**
* @constructor
- */
-WebInspector.TimelineModel.Filter = function()
-{
- /** @type {!WebInspector.TimelineModel} */
- this._model;
-}
-
-WebInspector.TimelineModel.Filter.prototype = {
- /**
- * @param {!WebInspector.TimelineModel.Record} record
- * @return {boolean}
- */
- accept: function(record)
- {
- return true;
- },
-
- notifyFilterChanged: function()
- {
- this._model._filterChanged();
- }
-}
-
-/**
- * @constructor
* @implements {WebInspector.OutputStream}
* @param {!WebInspector.TimelineModel} model
* @param {!{cancel: function()}} reader
@@ -1409,7 +752,7 @@ WebInspector.TimelineSaver.prototype = {
while (this._recordIndex < this._payloads.length) {
var item = JSON.stringify(this._payloads[this._recordIndex]);
var itemLength = item.length + separator.length;
- if (length + itemLength > WebInspector.TimelineModel.TransferChunkLengthBytes)
+ if (length + itemLength > WebInspector.TimelineModelImpl.TransferChunkLengthBytes)
break;
length += itemLength;
data.push(item);
@@ -1420,41 +763,3 @@ WebInspector.TimelineSaver.prototype = {
stream.write(data.join(separator), this._writeNextChunk.bind(this));
}
}
-
-/**
- * @constructor
- */
-WebInspector.TimelineMergingRecordBuffer = function()
-{
- this._backgroundRecordsBuffer = [];
-}
-
-/**
- * @constructor
- */
-WebInspector.TimelineMergingRecordBuffer.prototype = {
- /**
- * @param {string} thread
- * @param {!Array.<!WebInspector.TimelineModel.Record>} records
- * @return {!Array.<!WebInspector.TimelineModel.Record>}
- */
- process: function(thread, records)
- {
- if (thread) {
- this._backgroundRecordsBuffer = this._backgroundRecordsBuffer.concat(records);
- return [];
- }
- /**
- * @param {!WebInspector.TimelineModel.Record} a
- * @param {!WebInspector.TimelineModel.Record} b
- */
- function recordTimestampComparator(a, b)
- {
- // Never return 0, as the merge function will squash identical entries.
- return a.startTime() < b.startTime() ? -1 : 1;
- }
- var result = this._backgroundRecordsBuffer.mergeOrdered(records, recordTimestampComparator);
- this._backgroundRecordsBuffer = [];
- return result;
- }
-}
« no previous file with comments | « Source/devtools/front_end/timeline/TimelineModel.js ('k') | Source/devtools/front_end/timeline/TimelinePanel.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698