| Index: Source/devtools/front_end/HeapSnapshotView.js
|
| diff --git a/Source/devtools/front_end/HeapSnapshotView.js b/Source/devtools/front_end/HeapSnapshotView.js
|
| index 71a100baff9a1a88d2cb5717630e0c6347720d57..1d5fb917abe53293fdb1ae448fc06c9d70c99dc3 100644
|
| --- a/Source/devtools/front_end/HeapSnapshotView.js
|
| +++ b/Source/devtools/front_end/HeapSnapshotView.js
|
| @@ -775,6 +775,7 @@ WebInspector.HeapSnapshotProfileType = function()
|
| }
|
|
|
| WebInspector.HeapSnapshotProfileType.TypeId = "HEAP";
|
| +WebInspector.HeapSnapshotProfileType.HeapStatsUpdate = "HeapStatsUpdate";
|
|
|
| WebInspector.HeapSnapshotProfileType.prototype = {
|
| /**
|
| @@ -870,6 +871,9 @@ WebInspector.HeapSnapshotProfileType.prototype = {
|
| */
|
| lastSeenObjectId: function(lastSeenObjectId, timestamp)
|
| {
|
| + if (!this._profileSamples)
|
| + return;
|
| +
|
| this._profileSamples.ids[this._currentIndex] = lastSeenObjectId;
|
| this._profileSamples.timestamps[this._currentIndex] = timestamp;
|
| if (!this._profileSamples.max[this._currentIndex]) {
|
| @@ -877,6 +881,7 @@ WebInspector.HeapSnapshotProfileType.prototype = {
|
| this._profileSamples.sizes[this._currentIndex] = 0;
|
| }
|
| ++this._currentIndex;
|
| + this.dispatchEventToListeners(WebInspector.HeapSnapshotProfileType.HeapStatsUpdate, this._profileSamples);
|
| },
|
|
|
| get treeItemTitle()
|
| @@ -1013,6 +1018,11 @@ WebInspector.TrackingHeapSnapshotProfileType = function(profilesPanel, profileTy
|
| WebInspector.TrackingHeapSnapshotProfileType.TypeId = "HEAP-RECORD";
|
|
|
| WebInspector.TrackingHeapSnapshotProfileType.prototype = {
|
| + hasTemporaryView: function()
|
| + {
|
| + return true;
|
| + },
|
| +
|
| get buttonTooltip()
|
| {
|
| return this._recording ? WebInspector.UIString("Stop recording heap profile.") : WebInspector.UIString("Start recording heap profile.");
|
| @@ -1110,6 +1120,11 @@ WebInspector.HeapProfileHeader.prototype = {
|
| */
|
| createView: function(profilesPanel)
|
| {
|
| + if (this._profileType.id === WebInspector.TrackingHeapSnapshotProfileType.TypeId) {
|
| + var view = new WebInspector.HeapTrackingOverviewGrid(this);
|
| + this._profileType._parentType.addEventListener(WebInspector.HeapSnapshotProfileType.HeapStatsUpdate, view._onHeapStatsUpdate.bind(view));
|
| + return view;
|
| + }
|
| return new WebInspector.HeapSnapshotView(profilesPanel, this);
|
| },
|
|
|
| @@ -1337,7 +1352,7 @@ WebInspector.HeapSnapshotLoadFromFileDelegate.prototype = {
|
| /**
|
| * @constructor
|
| * @extends {WebInspector.View}
|
| - * @param {!WebInspector.HeapProfileHeader} heapProfileHeader
|
| + * @param {?WebInspector.HeapProfileHeader} heapProfileHeader
|
| */
|
| WebInspector.HeapTrackingOverviewGrid = function(heapProfileHeader)
|
| {
|
| @@ -1352,10 +1367,14 @@ WebInspector.HeapTrackingOverviewGrid = function(heapProfileHeader)
|
| this._overviewCalculator = new WebInspector.HeapTrackingOverviewGrid.OverviewCalculator();
|
| this._overviewGrid.addEventListener(WebInspector.OverviewGrid.Events.WindowChanged, this._onWindowChanged, this);
|
|
|
| - this._profileSamples = heapProfileHeader._profileSamples;
|
| - var timestamps = this._profileSamples.timestamps;
|
| - var startTime = timestamps[0];
|
| - this._totalTime = timestamps[timestamps.length - 1] - startTime;
|
| + this._minimumTimeDelta = 60000;
|
| + if (heapProfileHeader && heapProfileHeader._profileSamples) {
|
| + this._profileSamples = heapProfileHeader._profileSamples;
|
| + var timestamps = this._profileSamples.timestamps;
|
| + var startTime = timestamps[0];
|
| + this._totalTime = timestamps[timestamps.length - 1] - startTime;
|
| + } else
|
| + this._resetTrackingData();
|
| this._windowLeft = 0.0;
|
| this._windowRight = 1.0;
|
| }
|
| @@ -1363,12 +1382,20 @@ WebInspector.HeapTrackingOverviewGrid = function(heapProfileHeader)
|
| WebInspector.HeapTrackingOverviewGrid.IdsRangeChanged = "IdsRangeChanged";
|
|
|
| WebInspector.HeapTrackingOverviewGrid.prototype = {
|
| + _resetTrackingData: function(profileSamples)
|
| + {
|
| + this._totalTime = this._minimumTimeDelta;
|
| + this._profileSamples = profileSamples;
|
| + },
|
| +
|
| /**
|
| * @param {number} width
|
| * @param {number} height
|
| */
|
| _drawOverviewCanvas: function(width, height)
|
| {
|
| + if (!this._profileSamples)
|
| + return;
|
| var sizes = this._profileSamples.sizes;
|
| var usedSizes = this._profileSamples.max;
|
| var timestamps = this._profileSamples.timestamps;
|
| @@ -1385,7 +1412,7 @@ WebInspector.HeapTrackingOverviewGrid.prototype = {
|
| var size = 0;
|
| var currentX = 0;
|
| for (var i = 1; i < timestamps.length; ++i) {
|
| - var x = Math.floor((timestamps[i] - startTime) * scaleFactor) ;
|
| + var x = Math.floor((timestamps[i] - startTime) * scaleFactor);
|
| if (x !== currentX) {
|
| if (size)
|
| callback(currentX, size);
|
| @@ -1414,10 +1441,20 @@ WebInspector.HeapTrackingOverviewGrid.prototype = {
|
| this._overviewCanvas.style.height = height + "px";
|
| var yScaleFactor = height / (maxUsedSize * 1.1);
|
| var startTime = timestamps[0];
|
| + var endTime = timestamps[timestamps.length - 1];
|
|
|
| var context = this._overviewCanvas.getContext("2d");
|
| context.scale(window.devicePixelRatio, window.devicePixelRatio);
|
|
|
| + context.beginPath();
|
| + context.lineWidth = 2;
|
| + context.strokeStyle = "rgba(192, 192, 192, 0.6)";
|
| + var currentX = Math.floor((endTime - startTime) * scaleFactor);
|
| + context.moveTo(currentX, height - 1);
|
| + context.lineTo(currentX, 0);
|
| + context.stroke();
|
| + context.closePath();
|
| +
|
| /**
|
| * @param {number} x
|
| * @param {number} size
|
| @@ -1455,6 +1492,15 @@ WebInspector.HeapTrackingOverviewGrid.prototype = {
|
| this._updateGridTimerId = setTimeout(this._updateGrid.bind(this), 10);
|
| },
|
|
|
| + _onHeapStatsUpdate: function(event)
|
| + {
|
| + this._profileSamples = event.data;
|
| + var timestamps = this._profileSamples.timestamps;
|
| + if (this._totalTime < timestamps[timestamps.length - 1] - timestamps[0])
|
| + this._totalTime *= 2;
|
| + this._scheduleUpdate();
|
| + },
|
| +
|
| _scheduleUpdate: function()
|
| {
|
| if (this._updateTimerId)
|
| @@ -1478,14 +1524,13 @@ WebInspector.HeapTrackingOverviewGrid.prototype = {
|
| this._updateBoundaries();
|
| this._overviewCalculator._updateBoundaries(this);
|
| this._overviewGrid.updateDividers(this._overviewCalculator);
|
| - if (this._updateOverviewCanvas || updateOverviewCanvas) {
|
| - this._drawOverviewCanvas(this._overviewContainer.clientWidth, this._overviewContainer.clientHeight - 20);
|
| - this._updateOverviewCanvas = false;
|
| - }
|
| + this._drawOverviewCanvas(this._overviewContainer.clientWidth, this._overviewContainer.clientHeight - 20);
|
| },
|
|
|
| _updateGrid: function()
|
| {
|
| + if (!this._profileSamples)
|
| + return;
|
| this._updateGridTimerId = 0;
|
| this._updateBoundaries();
|
| var ids = this._profileSamples.ids;
|
|
|