Index: Source/devtools/front_end/timeline/TimelineTracingView.js |
diff --git a/Source/devtools/front_end/timeline/TimelineTracingView.js b/Source/devtools/front_end/timeline/TimelineTracingView.js |
deleted file mode 100644 |
index e07032b96a83b066801d712c1bd8588585461757..0000000000000000000000000000000000000000 |
--- a/Source/devtools/front_end/timeline/TimelineTracingView.js |
+++ /dev/null |
@@ -1,554 +0,0 @@ |
-/* |
- * 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 |
- * @implements {WebInspector.TimelineModeView} |
- * @implements {WebInspector.FlameChartDelegate} |
- * @extends {WebInspector.VBox} |
- * @param {!WebInspector.TimelineModeViewDelegate} delegate |
- * @param {!WebInspector.TracingModel} tracingModel |
- * @param {!WebInspector.TimelineModel} modelForMinimumBoundary |
- */ |
-WebInspector.TimelineTracingView = function(delegate, tracingModel, modelForMinimumBoundary) |
-{ |
- WebInspector.VBox.call(this); |
- this._delegate = delegate; |
- this._tracingModel = tracingModel; |
- this.element.classList.add("timeline-flamechart"); |
- this.registerRequiredCSS("flameChart.css"); |
- this._dataProvider = new WebInspector.TraceViewFlameChartDataProvider(this._tracingModel, modelForMinimumBoundary); |
- this._mainView = new WebInspector.FlameChart(this._dataProvider, this, true); |
- this._mainView.show(this.element); |
- this._mainView.addEventListener(WebInspector.FlameChart.Events.EntrySelected, this._onEntrySelected, this); |
-} |
- |
-WebInspector.TimelineTracingView.prototype = { |
- /** |
- * @param {number} windowStartTime |
- * @param {number} windowEndTime |
- */ |
- requestWindowTimes: function(windowStartTime, windowEndTime) |
- { |
- this._delegate.requestWindowTimes(windowStartTime, windowEndTime); |
- }, |
- |
- wasShown: function() |
- { |
- this._mainView.scheduleUpdate(); |
- }, |
- |
- /** |
- * @return {!WebInspector.View} |
- */ |
- view: function() |
- { |
- return this; |
- }, |
- |
- dispose: function() |
- { |
- }, |
- |
- reset: function() |
- { |
- this._dataProvider.reset(); |
- this._mainView.setWindowTimes(0, Infinity); |
- }, |
- |
- /** |
- * @param {?RegExp} textFilter |
- */ |
- refreshRecords: function(textFilter) |
- { |
- this._dataProvider.reset(); |
- this._mainView.scheduleUpdate(); |
- }, |
- |
- /** |
- * @param {!WebInspector.TimelineModel.Record} record |
- */ |
- addRecord: function(record) {}, |
- |
- /** |
- * @param {?WebInspector.TimelineModel.Record} record |
- * @param {string=} regex |
- * @param {boolean=} selectRecord |
- */ |
- highlightSearchResult: function(record, regex, selectRecord) {}, |
- |
- /** |
- * @param {number} startTime |
- * @param {number} endTime |
- */ |
- setWindowTimes: function(startTime, endTime) |
- { |
- this._mainView.setWindowTimes(startTime, endTime); |
- }, |
- |
- /** |
- * @param {number} width |
- */ |
- setSidebarSize: function(width) {}, |
- |
- /** |
- * @param {?WebInspector.TimelineSelection} selection |
- */ |
- setSelection: function(selection) {}, |
- |
- /** |
- * @param {!WebInspector.Event} event |
- */ |
- _onEntrySelected: function(event) |
- { |
- var index = /** @type {number} */ (event.data); |
- var record = this._dataProvider._recordAt(index); |
- if (!record || this._dataProvider._isHeaderRecord(record)) { |
- this._delegate.showInDetails("", document.createTextNode("")); |
- return; |
- } |
- var contentHelper = new WebInspector.TimelineDetailsContentHelper(null, null, false); |
- contentHelper.appendTextRow(WebInspector.UIString("Name"), record.name); |
- contentHelper.appendTextRow(WebInspector.UIString("Category"), record.category); |
- contentHelper.appendTextRow(WebInspector.UIString("Start"), Number.millisToString(record.startTime - this._tracingModel.minimumRecordTime(), true)); |
- contentHelper.appendTextRow(WebInspector.UIString("Duration"), Number.millisToString(record.duration, true)); |
- if (!Object.isEmpty(record.args)) |
- contentHelper.appendElementRow(WebInspector.UIString("Arguments"), this._formatArguments(record.args)); |
- |
- function reveal() |
- { |
- WebInspector.Revealer.reveal(new WebInspector.DeferredTracingLayerTree(record.thread.target(), record.args["snapshot"]["active_tree"]["root_layer"], record.args["snapshot"]["device_viewport_size"])); |
- } |
- /** |
- * @param {!Node=} node |
- * @this {WebInspector.TimelineTracingView} |
- */ |
- function appendPreviewAndShowDetails(node) |
- { |
- if (node) |
- contentHelper.appendElementRow("Preview", node); |
- this._delegate.showInDetails(WebInspector.UIString("Selected Event"), contentHelper.element); |
- } |
- var recordTypes = WebInspector.TracingTimelineModel.RecordType; |
- switch (record.name) { |
- case recordTypes.PictureSnapshot: |
- WebInspector.TracingTimelineUIUtils.buildPicturePreviewContent(this._tracingModel.target(), record.args["snapshot"]["skp64"], appendPreviewAndShowDetails.bind(this)); |
- break; |
- case recordTypes.LayerTreeHostImplSnapshot: |
- var link = document.createElement("span"); |
- link.classList.add("revealable-link"); |
- link.textContent = "show"; |
- link.addEventListener("click", reveal, false); |
- contentHelper.appendElementRow(WebInspector.UIString("Layer tree"), link); |
- // Fall-through intended. |
- default: |
- this._delegate.showInDetails(WebInspector.UIString("Selected Event"), contentHelper.element); |
- } |
- }, |
- |
- /** |
- * @param {!Object} args |
- * @return {!Element} |
- */ |
- _formatArguments: function(args) |
- { |
- var table = document.createElement("table"); |
- for (var name in args) { |
- var row = table.createChild("tr"); |
- row.createChild("td", "timeline-details-row-title").textContent = name + ":"; |
- var valueContainer = row.createChild("td", "timeline-details-row-data"); |
- var value = args[name]; |
- if (typeof value === "object" && value) { |
- var localObject = new WebInspector.LocalJSONObject(value); |
- var propertiesSection = new WebInspector.ObjectPropertiesSection(localObject, localObject.description); |
- valueContainer.appendChild(propertiesSection.element); |
- } else { |
- valueContainer.textContent = String(value); |
- } |
- } |
- return table; |
- }, |
- |
- __proto__: WebInspector.VBox.prototype |
-}; |
- |
-/** |
- * @constructor |
- * @implements {WebInspector.FlameChartDataProvider} |
- * @param {!WebInspector.TracingModel} model |
- * @param {!WebInspector.TimelineModel} timelineModelForMinimumBoundary |
- */ |
-WebInspector.TraceViewFlameChartDataProvider = function(model, timelineModelForMinimumBoundary) |
-{ |
- WebInspector.FlameChartDataProvider.call(this); |
- this._model = model; |
- this._timelineModelForMinimumBoundary = timelineModelForMinimumBoundary; |
- this._font = "12px " + WebInspector.fontFamily(); |
- this._palette = new WebInspector.TraceViewPalette(); |
- var dummyEventPayload = { |
- cat: "dummy", |
- pid: 0, |
- tid: 0, |
- ts: 0, |
- ph: "dummy", |
- name: "dummy", |
- args: {}, |
- dur: 0, |
- id: 0, |
- s: "" |
- } |
- this._processHeaderRecord = new WebInspector.TracingModel.Event(dummyEventPayload, 0, null); |
- this._threadHeaderRecord = new WebInspector.TracingModel.Event(dummyEventPayload, 0, null); |
-} |
- |
-WebInspector.TraceViewFlameChartDataProvider.prototype = { |
- /** |
- * @return {number} |
- */ |
- barHeight: function() |
- { |
- return 20; |
- }, |
- |
- /** |
- * @return {number} |
- */ |
- textBaseline: function() |
- { |
- return 6; |
- }, |
- |
- /** |
- * @return {number} |
- */ |
- textPadding: function() |
- { |
- return 5; |
- }, |
- |
- /** |
- * @param {number} entryIndex |
- * @return {string} |
- */ |
- entryFont: function(entryIndex) |
- { |
- return this._font; |
- }, |
- |
- /** |
- * @param {number} entryIndex |
- * @return {?string} |
- */ |
- entryTitle: function(entryIndex) |
- { |
- var record = this._records[entryIndex]; |
- if (this._isHeaderRecord(record)) |
- return this._headerTitles[entryIndex] |
- return record.name; |
- }, |
- |
- /** |
- * @param {number} startTime |
- * @param {number} endTime |
- * @return {?Array.<number>} |
- */ |
- dividerOffsets: function(startTime, endTime) |
- { |
- return null; |
- }, |
- |
- reset: function() |
- { |
- this._timelineData = null; |
- /** @type {!Array.<!WebInspector.TracingModel.Event>} */ |
- this._records = []; |
- }, |
- |
- /** |
- * @return {!WebInspector.FlameChart.TimelineData} |
- */ |
- timelineData: function() |
- { |
- if (this._timelineData) |
- return this._timelineData; |
- |
- /** |
- * @type {?WebInspector.FlameChart.TimelineData} |
- */ |
- this._timelineData = { |
- entryLevels: [], |
- entryTotalTimes: [], |
- entryStartTimes: [] |
- }; |
- |
- this._currentLevel = 0; |
- this._headerTitles = {}; |
- this._minimumBoundary = this._timelineModelForMinimumBoundary.minimumRecordTime(); |
- this._timeSpan = Math.max(this._model.maximumRecordTime() - this._minimumBoundary, 1000); |
- var processes = this._model.sortedProcesses(); |
- for (var processIndex = 0; processIndex < processes.length; ++processIndex) { |
- var process = processes[processIndex]; |
- this._appendHeaderRecord(process.name(), this._processHeaderRecord); |
- var objectNames = process.sortedObjectNames(); |
- for (var objectNameIndex = 0; objectNameIndex < objectNames.length; ++objectNameIndex) { |
- this._appendHeaderRecord(WebInspector.UIString("Object %s", objectNames[objectNameIndex]), this._threadHeaderRecord); |
- var objects = process.objectsByName(objectNames[objectNameIndex]); |
- for (var objectIndex = 0; objectIndex < objects.length; ++objectIndex) |
- this._appendRecord(objects[objectIndex], 0); |
- ++this._currentLevel; |
- } |
- var threads = process.sortedThreads(); |
- for (var threadIndex = 0; threadIndex < threads.length; ++threadIndex) { |
- this._appendHeaderRecord(threads[threadIndex].name(), this._threadHeaderRecord); |
- var events = threads[threadIndex].events(); |
- for (var eventIndex = 0; eventIndex < events.length; ++eventIndex) { |
- var event = events[eventIndex]; |
- if (event.duration) |
- this._appendRecord(event, event.level); |
- } |
- this._currentLevel += threads[threadIndex].maxStackDepth(); |
- } |
- ++this._currentLevel; |
- } |
- return this._timelineData; |
- }, |
- |
- /** |
- * @return {number} |
- */ |
- minimumBoundary: function() |
- { |
- return this._minimumBoundary; |
- }, |
- |
- /** |
- * @return {number} |
- */ |
- totalTime: function() |
- { |
- return this._timeSpan; |
- }, |
- |
- /** |
- * @return {number} |
- */ |
- maxStackDepth: function() |
- { |
- return this._currentLevel; |
- }, |
- |
- /** |
- * @param {number} entryIndex |
- * @return {?Array.<!{title: string, text: string}>} |
- */ |
- prepareHighlightedEntryInfo: function(entryIndex) |
- { |
- return null; |
- }, |
- |
- /** |
- * @param {number} entryIndex |
- * @return {boolean} |
- */ |
- canJumpToEntry: function(entryIndex) |
- { |
- var record = this._records[entryIndex]; |
- return record.phase === WebInspector.TracingModel.Phase.SnapshotObject; |
- }, |
- |
- /** |
- * @param {number} entryIndex |
- * @return {string} |
- */ |
- entryColor: function(entryIndex) |
- { |
- var record = this._records[entryIndex]; |
- if (record.phase === WebInspector.TracingModel.Phase.SnapshotObject) |
- return "rgb(20, 150, 20)"; |
- if (record === this._processHeaderRecord) |
- return "#555"; |
- if (record === this._threadHeaderRecord) |
- return "#777"; |
- return this._palette.colorForString(record.name); |
- }, |
- |
- /** |
- * @param {number} entryIndex |
- * @param {!CanvasRenderingContext2D} context |
- * @param {?string} text |
- * @param {number} barX |
- * @param {number} barY |
- * @param {number} barWidth |
- * @param {number} barHeight |
- * @param {function(number):number} timeToPosition |
- * @return {boolean} |
- */ |
- decorateEntry: function(entryIndex, context, text, barX, barY, barWidth, barHeight, timeToPosition) |
- { |
- return false; |
- }, |
- |
- /** |
- * @param {number} entryIndex |
- * @return {boolean} |
- */ |
- forceDecoration: function(entryIndex) |
- { |
- return false; |
- }, |
- |
- /** |
- * @param {number} entryIndex |
- * @return {?{startTime: number, endTime: number}} |
- */ |
- highlightTimeRange: function(entryIndex) |
- { |
- var record = this._records[entryIndex]; |
- if (!record || this._isHeaderRecord(record)) |
- return null; |
- return { |
- startTime: record.startTime, |
- endTime: record.endTime |
- } |
- }, |
- |
- /** |
- * @return {number} |
- */ |
- paddingLeft: function() |
- { |
- return 0; |
- }, |
- |
- /** |
- * @param {number} entryIndex |
- * @return {string} |
- */ |
- textColor: function(entryIndex) |
- { |
- return "white"; |
- }, |
- |
- /** |
- * @param {string} title |
- * @param {!WebInspector.TracingModel.Event} record |
- */ |
- _appendHeaderRecord: function(title, record) |
- { |
- var index = this._records.length; |
- this._records.push(record); |
- this._timelineData.entryLevels[index] = this._currentLevel++; |
- this._timelineData.entryTotalTimes[index] = this.totalTime(); |
- this._timelineData.entryStartTimes[index] = this._minimumBoundary; |
- this._headerTitles[index] = title; |
- }, |
- |
- /** |
- * @param {!WebInspector.TracingModel.Event} record |
- * @param {number} level |
- */ |
- _appendRecord: function(record, level) |
- { |
- var index = this._records.length; |
- this._records.push(record); |
- this._timelineData.entryLevels[index] = this._currentLevel + level; |
- this._timelineData.entryTotalTimes[index] = record.phase === WebInspector.TracingModel.Phase.SnapshotObject ? NaN : record.duration || 0; |
- this._timelineData.entryStartTimes[index] = record.startTime; |
- }, |
- |
- /** |
- * @param {!WebInspector.TracingModel.Event} record |
- */ |
- _isHeaderRecord: function(record) |
- { |
- return record === this._threadHeaderRecord || record === this._processHeaderRecord; |
- }, |
- |
- /** |
- * @param {number} index |
- * @return {!WebInspector.TracingModel.Event|undefined} |
- */ |
- _recordAt: function(index) |
- { |
- return this._records[index]; |
- } |
-} |
- |
-// The below logic is shamelessly stolen from https://code.google.com/p/trace-viewer/source/browse/trunk/trace_viewer/tracing/color_scheme.js |
- |
-/** |
- * @constructor |
- */ |
-WebInspector.TraceViewPalette = function() |
-{ |
- this._palette = WebInspector.TraceViewPalette._paletteBase.map(WebInspector.TraceViewPalette._rgbToString); |
-} |
- |
-WebInspector.TraceViewPalette._paletteBase = [ |
- [138, 113, 152], |
- [175, 112, 133], |
- [127, 135, 225], |
- [93, 81, 137], |
- [116, 143, 119], |
- [178, 214, 122], |
- [87, 109, 147], |
- [119, 155, 95], |
- [114, 180, 160], |
- [132, 85, 103], |
- [157, 210, 150], |
- [148, 94, 86], |
- [164, 108, 138], |
- [139, 191, 150], |
- [110, 99, 145], |
- [80, 129, 109], |
- [125, 140, 149], |
- [93, 124, 132], |
- [140, 85, 140], |
- [104, 163, 162], |
- [132, 141, 178], |
- [131, 105, 147], |
- [135, 183, 98], |
- [152, 134, 177], |
- [141, 188, 141], |
- [133, 160, 210], |
- [126, 186, 148], |
- [112, 198, 205], |
- [180, 122, 195], |
- [203, 144, 152] |
-]; |
- |
-/** |
- * @param {string} string |
- * @return {number} |
- */ |
-WebInspector.TraceViewPalette._stringHash = function(string) |
-{ |
- var hash = 0; |
- for (var i = 0; i < string.length; ++i) |
- hash = (hash + 37 * hash + 11 * string.charCodeAt(i)) % 0xFFFFFFFF; |
- return hash; |
-} |
- |
-/** |
- * @param {!Array.<number>} rgb |
- * @return {string} |
- */ |
-WebInspector.TraceViewPalette._rgbToString = function(rgb) |
-{ |
- return "rgb(" + rgb.join(",") + ")"; |
-} |
- |
-WebInspector.TraceViewPalette.prototype = { |
- /** |
- * @param {string} string |
- * @return {string} |
- */ |
- colorForString: function(string) |
- { |
- var hash = WebInspector.TraceViewPalette._stringHash(string); |
- return this._palette[hash % this._palette.length]; |
- } |
-}; |