Index: Source/devtools/front_end/timeline/TimelineEventOverview.js |
diff --git a/Source/devtools/front_end/timeline/TimelineEventOverview.js b/Source/devtools/front_end/timeline/TimelineEventOverview.js |
index fab00196003aa5467adafda490a4ad74443d1c18..d732303b7348fb0f28650c1675eefcafa63a5f84 100644 |
--- a/Source/devtools/front_end/timeline/TimelineEventOverview.js |
+++ b/Source/devtools/front_end/timeline/TimelineEventOverview.js |
@@ -254,13 +254,11 @@ WebInspector.TimelineEventOverview.Network.prototype = { |
/** |
* @constructor |
* @extends {WebInspector.TimelineEventOverview} |
- * @param {string} id |
- * @param {string} title |
* @param {!WebInspector.TimelineModel} model |
*/ |
-WebInspector.TimelineEventOverview.Thread = function(id, title, model) |
+WebInspector.TimelineEventOverview.CPUActivity = function(model) |
{ |
- WebInspector.TimelineEventOverview.call(this, id, title, model) |
+ WebInspector.TimelineEventOverview.call(this, "cpu-activity", WebInspector.UIString("CPU"), model); |
this._fillStyles = {}; |
var categories = WebInspector.TimelineUIUtils.categories(); |
for (var category in categories) { |
@@ -268,9 +266,10 @@ WebInspector.TimelineEventOverview.Thread = function(id, title, model) |
categories[category].addEventListener(WebInspector.TimelineCategory.Events.VisibilityChanged, this._onCategoryVisibilityChanged, this); |
} |
this._disabledCategoryFillStyle = "hsl(0, 0%, 67%)"; |
+ this._backgroundCanvas = this.element.createChild("canvas", "fill background"); |
} |
-WebInspector.TimelineEventOverview.Thread.prototype = { |
+WebInspector.TimelineEventOverview.CPUActivity.prototype = { |
/** |
* @override |
*/ |
@@ -296,29 +295,22 @@ WebInspector.TimelineEventOverview.Thread.prototype = { |
return category.hidden ? this._disabledCategoryFillStyle : this._fillStyles[category.name]; |
}, |
- __proto__: WebInspector.TimelineEventOverview.prototype |
-} |
- |
-/** |
- * @constructor |
- * @extends {WebInspector.TimelineEventOverview.Thread} |
- * @param {!WebInspector.TimelineModel} model |
- */ |
-WebInspector.TimelineEventOverview.MainThread = function(model) |
-{ |
- WebInspector.TimelineEventOverview.Thread.call(this, "main-thread", WebInspector.UIString("CPU"), model) |
-} |
+ /** |
+ * @override |
+ */ |
+ resetCanvas: function() |
+ { |
+ WebInspector.TimelineEventOverview.prototype.resetCanvas.call(this); |
+ this._backgroundCanvas.width = this.element.clientWidth * window.devicePixelRatio; |
+ this._backgroundCanvas.height = this.element.clientHeight * window.devicePixelRatio; |
+ }, |
-WebInspector.TimelineEventOverview.MainThread.prototype = { |
/** |
* @override |
*/ |
update: function() |
{ |
WebInspector.TimelineEventOverview.prototype.update.call(this); |
- var events = this._model.mainThreadEvents(); |
- if (!events.length) |
- return; |
var /** @const */ quantSizePx = 4 * window.devicePixelRatio; |
var height = this._canvas.height; |
var baseLine = height; |
@@ -326,9 +318,6 @@ WebInspector.TimelineEventOverview.MainThread.prototype = { |
var timeSpan = this._model.maximumRecordTime() - timeOffset; |
var scale = this._canvas.width / timeSpan; |
var quantTime = quantSizePx / scale; |
- var quantizer = new WebInspector.Quantizer(timeOffset, quantTime, drawSample.bind(this)); |
- var ctx = this._context; |
- var x = 0; |
var categories = WebInspector.TimelineUIUtils.categories(); |
var categoryOrder = ["idle", "loading", "painting", "rendering", "scripting", "other"]; |
var otherIndex = categoryOrder.indexOf("other"); |
@@ -336,49 +325,64 @@ WebInspector.TimelineEventOverview.MainThread.prototype = { |
console.assert(idleIndex === categoryOrder.indexOf("idle")); |
for (var i = idleIndex + 1; i < categoryOrder.length; ++i) |
categories[categoryOrder[i]]._overviewIndex = i; |
- var categoryIndexStack = []; |
+ |
+ for (var thread of this._model.virtualThreads()) |
+ drawThreadEvents.call(this, this._backgroundCanvas.getContext("2d"), thread.events); |
+ drawThreadEvents.call(this, this._context, this._model.mainThreadEvents()); |
/** |
- * @param {!Array<number>} counters |
+ * @param {!CanvasRenderingContext2D} ctx |
+ * @param {!Array<!WebInspector.TracingModel.Event>} events |
* @this {WebInspector.TimelineEventOverview} |
*/ |
- function drawSample(counters) |
+ function drawThreadEvents(ctx, events) |
{ |
- var y = baseLine; |
- for (var i = idleIndex + 1; i < counters.length; ++i) { |
- if (!counters[i]) |
- continue; |
- var h = counters[i] / quantTime * height; |
- ctx.fillStyle = this._categoryColor(categories[categoryOrder[i]]); |
- ctx.fillRect(x, y - h, quantSizePx, h); |
- y -= h; |
+ var quantizer = new WebInspector.Quantizer(timeOffset, quantTime, drawSample.bind(this)); |
+ var x = 0; |
+ var categoryIndexStack = []; |
+ |
+ /** |
+ * @param {!Array<number>} counters |
+ * @this {WebInspector.TimelineEventOverview} |
+ */ |
+ function drawSample(counters) |
+ { |
+ var y = baseLine; |
+ for (var i = idleIndex + 1; i < counters.length; ++i) { |
+ if (!counters[i]) |
+ continue; |
+ var h = counters[i] / quantTime * height; |
+ ctx.fillStyle = this._categoryColor(categories[categoryOrder[i]]); |
+ ctx.fillRect(x, y - h, quantSizePx, h); |
+ y -= h; |
+ } |
+ x += quantSizePx; |
} |
- x += quantSizePx; |
- } |
- /** |
- * @param {!WebInspector.TracingModel.Event} e |
- */ |
- function onEventStart(e) |
- { |
- var index = categoryIndexStack.length ? categoryIndexStack.peekLast() : idleIndex; |
- quantizer.appendInterval(e.startTime, index); |
- categoryIndexStack.push(WebInspector.TimelineUIUtils.eventStyle(e).category._overviewIndex || otherIndex); |
- } |
+ /** |
+ * @param {!WebInspector.TracingModel.Event} e |
+ */ |
+ function onEventStart(e) |
+ { |
+ var index = categoryIndexStack.length ? categoryIndexStack.peekLast() : idleIndex; |
+ quantizer.appendInterval(e.startTime, index); |
+ categoryIndexStack.push(WebInspector.TimelineUIUtils.eventStyle(e).category._overviewIndex || otherIndex); |
+ } |
- /** |
- * @param {!WebInspector.TracingModel.Event} e |
- */ |
- function onEventEnd(e) |
- { |
- quantizer.appendInterval(e.endTime, categoryIndexStack.pop()); |
- } |
+ /** |
+ * @param {!WebInspector.TracingModel.Event} e |
+ */ |
+ function onEventEnd(e) |
+ { |
+ quantizer.appendInterval(e.endTime, categoryIndexStack.pop()); |
+ } |
- WebInspector.TimelineModel.forEachEvent(events, onEventStart, onEventEnd); |
- quantizer.appendInterval(timeOffset + timeSpan + quantTime, idleIndex); // Kick drawing the last bucket. |
+ WebInspector.TimelineModel.forEachEvent(events, onEventStart, onEventEnd); |
+ quantizer.appendInterval(timeOffset + timeSpan + quantTime, idleIndex); // Kick drawing the last bucket. |
+ } |
}, |
- __proto__: WebInspector.TimelineEventOverview.Thread.prototype |
+ __proto__: WebInspector.TimelineEventOverview.prototype |
} |
/** |