| Index: chrome_linux/resources/inspector/TimelinePanel.js
|
| ===================================================================
|
| --- chrome_linux/resources/inspector/TimelinePanel.js (revision 197568)
|
| +++ chrome_linux/resources/inspector/TimelinePanel.js (working copy)
|
| @@ -1652,8 +1652,11 @@
|
| WebInspector.TimelineOverviewBase = function(model)
|
| {
|
| WebInspector.View.call(this);
|
| +this.element.classList.add("fill");
|
| +
|
| this._model = model;
|
| this._canvas = this.element.createChild("canvas", "fill");
|
| +this._context = this._canvas.getContext("2d");
|
| }
|
|
|
| WebInspector.TimelineOverviewBase.prototype = {
|
| @@ -1676,6 +1679,12 @@
|
| };
|
| },
|
|
|
| +_resetCanvas: function()
|
| +{
|
| +this._canvas.width = this.element.clientWidth * window.devicePixelRatio;
|
| +this._canvas.height = this.element.clientHeight * window.devicePixelRatio;
|
| +},
|
| +
|
| __proto__: WebInspector.View.prototype
|
| }
|
|
|
| @@ -1684,7 +1693,6 @@
|
| {
|
| WebInspector.TimelineOverviewBase.call(this, model);
|
| this.element.id = "timeline-overview-memory";
|
| -this.element.classList.add("fill");
|
|
|
| this._maxHeapSizeLabel = this.element.createChild("div", "max memory-graph-label");
|
| this._minHeapSizeLabel = this.element.createChild("div", "min memory-graph-label");
|
| @@ -1697,9 +1705,7 @@
|
| if (!records.length)
|
| return;
|
|
|
| -const yPadding = 5;
|
| -this._canvas.width = this.element.clientWidth;
|
| -this._canvas.height = this.element.clientHeight - yPadding;
|
| +this._resetCanvas();
|
|
|
| const lowerOffset = 3;
|
| var maxUsedHeapSize = 0;
|
| @@ -1726,7 +1732,7 @@
|
| histogram[x] = Math.max(histogram[x] || 0, y);
|
| });
|
|
|
| -var ctx = this._canvas.getContext("2d");
|
| +var ctx = this._context;
|
| this._clear(ctx);
|
|
|
|
|
| @@ -1753,8 +1759,8 @@
|
| ctx.stroke();
|
|
|
| ctx.fillStyle = "rgba(214,225,254, 0.8);";
|
| -ctx.lineTo(width, 60);
|
| -ctx.lineTo(0, 60);
|
| +ctx.lineTo(width, this._canvas.height);
|
| +ctx.lineTo(0, this._canvas.height);
|
| ctx.lineTo(0, height - initialY);
|
| ctx.fill();
|
| ctx.closePath();
|
| @@ -1778,37 +1784,30 @@
|
| WebInspector.TimelineOverviewBase.call(this, model);
|
|
|
| this.element.id = "timeline-overview-events";
|
| -this._context = this._canvas.getContext("2d");
|
|
|
| this._fillStyles = {};
|
| var categories = WebInspector.TimelinePresentationModel.categories();
|
| for (var category in categories)
|
| -this._fillStyles[category] = WebInspector.TimelinePresentationModel.createFillStyleForCategory(this._context, 0, WebInspector.TimelineEventOverview._innerStripHeight, categories[category]);
|
| +this._fillStyles[category] = WebInspector.TimelinePresentationModel.createFillStyleForCategory(this._context, 0, WebInspector.TimelineEventOverview._stripGradientHeight, categories[category]);
|
|
|
| -this._disabledCategoryFillStyle = WebInspector.TimelinePresentationModel.createFillStyle(this._context, 0, WebInspector.TimelineEventOverview._innerStripHeight,
|
| +this._disabledCategoryFillStyle = WebInspector.TimelinePresentationModel.createFillStyle(this._context, 0, WebInspector.TimelineEventOverview._stripGradientHeight,
|
| "rgb(218, 218, 218)", "rgb(170, 170, 170)", "rgb(143, 143, 143)");
|
|
|
| this._disabledCategoryBorderStyle = "rgb(143, 143, 143)";
|
| }
|
|
|
|
|
| -WebInspector.TimelineEventOverview._canvasHeight = 60;
|
| -
|
| WebInspector.TimelineEventOverview._numberOfStrips = 3;
|
|
|
| -WebInspector.TimelineEventOverview._stripHeight = Math.round(WebInspector.TimelineEventOverview._canvasHeight / WebInspector.TimelineEventOverview._numberOfStrips);
|
|
|
| -WebInspector.TimelineEventOverview._stripPadding = 4;
|
| +WebInspector.TimelineEventOverview._stripGradientHeight = 120;
|
|
|
| -WebInspector.TimelineEventOverview._innerStripHeight = WebInspector.TimelineEventOverview._stripHeight - 2 * WebInspector.TimelineEventOverview._stripPadding;
|
| -
|
| WebInspector.TimelineEventOverview.prototype = {
|
| update: function()
|
| {
|
| +this._resetCanvas();
|
|
|
| -this._canvas.width = this.element.parentElement.clientWidth;
|
| -this._canvas.height = WebInspector.TimelineEventOverview._canvasHeight;
|
| -
|
| +var stripHeight = Math.round(this._canvas.height / WebInspector.TimelineEventOverview._numberOfStrips);
|
| var timeOffset = this._model.minimumRecordTime();
|
| var timeSpan = this._model.maximumRecordTime() - timeOffset;
|
| var scale = this._canvas.width / timeSpan;
|
| @@ -1817,7 +1816,7 @@
|
|
|
| this._context.fillStyle = "rgba(0, 0, 0, 0.05)";
|
| for (var i = 1; i < WebInspector.TimelineEventOverview._numberOfStrips; i += 2)
|
| -this._context.fillRect(0.5, i * WebInspector.TimelineEventOverview._stripHeight + 0.5, this._canvas.width, WebInspector.TimelineEventOverview._stripHeight);
|
| +this._context.fillRect(0.5, i * stripHeight + 0.5, this._canvas.width, stripHeight);
|
|
|
| function appendRecord(record)
|
| {
|
| @@ -1837,13 +1836,13 @@
|
| return;
|
| }
|
| if (bar)
|
| -this._renderBar(bar.start, bar.end, bar.category);
|
| +this._renderBar(bar.start, bar.end, stripHeight, bar.category);
|
| lastBarByGroup[category.overviewStripGroupIndex] = { start: recordStart, end: recordEnd, category: category };
|
| }
|
| WebInspector.TimelinePresentationModel.forAllRecords(this._model.records, appendRecord.bind(this));
|
| for (var i = 0; i < lastBarByGroup.length; ++i) {
|
| if (lastBarByGroup[i])
|
| -this._renderBar(lastBarByGroup[i].start, lastBarByGroup[i].end, lastBarByGroup[i].category);
|
| +this._renderBar(lastBarByGroup[i].start, lastBarByGroup[i].end, stripHeight, lastBarByGroup[i].category);
|
| }
|
| },
|
|
|
| @@ -1852,18 +1851,23 @@
|
| this.update();
|
| },
|
|
|
| -_renderBar: function(begin, end, category)
|
| +
|
| +_renderBar: function(begin, end, height, category)
|
| {
|
| +const stripPadding = 4 * window.devicePixelRatio;
|
| +const innerStripHeight = height - 2 * stripPadding;
|
| +
|
| var x = begin + 0.5;
|
| -var y = category.overviewStripGroupIndex * WebInspector.TimelineEventOverview._stripHeight + WebInspector.TimelineEventOverview._stripPadding + 0.5;
|
| +var y = category.overviewStripGroupIndex * height + stripPadding + 0.5;
|
| var width = Math.max(end - begin, 1);
|
|
|
| this._context.save();
|
| this._context.translate(x, y);
|
| +this._context.scale(1, innerStripHeight / WebInspector.TimelineEventOverview._stripGradientHeight);
|
| this._context.fillStyle = category.hidden ? this._disabledCategoryFillStyle : this._fillStyles[category.name];
|
| -this._context.fillRect(0, 0, width, WebInspector.TimelineEventOverview._innerStripHeight);
|
| +this._context.fillRect(0, 0, width, WebInspector.TimelineEventOverview._stripGradientHeight);
|
| this._context.strokeStyle = category.hidden ? this._disabledCategoryBorderStyle : category.borderColor;
|
| -this._context.strokeRect(0, 0, width, WebInspector.TimelineEventOverview._innerStripHeight);
|
| +this._context.strokeRect(0, 0, width, WebInspector.TimelineEventOverview._stripGradientHeight);
|
| this._context.restore();
|
| },
|
|
|
| @@ -1874,18 +1878,16 @@
|
| WebInspector.TimelineFrameOverview = function(model)
|
| {
|
| WebInspector.TimelineOverviewBase.call(this, model);
|
| -this._canvas.classList.add("timeline-frame-overview-bars");
|
| +this.element.id = "timeline-overview-frames";
|
| this.reset();
|
|
|
| -this._outerPadding = 4;
|
| -this._maxInnerBarWidth = 10;
|
| +this._outerPadding = 4 * window.devicePixelRatio;
|
| +this._maxInnerBarWidth = 10 * window.devicePixelRatio;
|
|
|
|
|
| -this._actualPadding = 5;
|
| +this._actualPadding = 5 * window.devicePixelRatio;
|
| this._actualOuterBarWidth = this._maxInnerBarWidth + this._actualPadding;
|
|
|
| -this._context = this._canvas.getContext("2d");
|
| -
|
| this._fillStyles = {};
|
| var categories = WebInspector.TimelinePresentationModel.categories();
|
| for (var category in categories)
|
| @@ -1902,12 +1904,13 @@
|
|
|
| update: function()
|
| {
|
| -const minBarWidth = 4;
|
| -this._framesPerBar = Math.max(1, this._frames.length * minBarWidth / this.element.clientWidth);
|
| +const minBarWidth = 4 * window.devicePixelRatio;
|
| +this._resetCanvas();
|
| +this._framesPerBar = Math.max(1, this._frames.length * minBarWidth / this._canvas.width);
|
| this._barTimes = [];
|
| var visibleFrames = this._aggregateFrames(this._framesPerBar);
|
|
|
| -const paddingTop = 4;
|
| +const paddingTop = 4 * window.devicePixelRatio;
|
|
|
|
|
|
|
| @@ -1916,7 +1919,7 @@
|
| if (fullBarLength < this._medianFrameLength)
|
| fullBarLength = Math.min(this._medianFrameLength * 2, this._maxFrameLength);
|
|
|
| -var scale = (this._canvas.clientHeight - paddingTop) / fullBarLength;
|
| +var scale = (this._canvas.height - paddingTop) / fullBarLength;
|
| this._renderBars(visibleFrames, scale);
|
| },
|
|
|
| @@ -1972,11 +1975,7 @@
|
|
|
| _renderBars: function(frames, scale)
|
| {
|
| -
|
| -this._canvas.width = this._canvas.clientWidth;
|
| -this._canvas.height = this._canvas.clientHeight;
|
| -
|
| -const maxPadding = 5;
|
| +const maxPadding = 5 * window.devicePixelRatio;
|
| this._actualOuterBarWidth = Math.min((this._canvas.width - 2 * this._outerPadding) / frames.length, this._maxInnerBarWidth + maxPadding);
|
| this._actualPadding = Math.min(Math.floor(this._actualOuterBarWidth / 3), maxPadding);
|
|
|
| @@ -2000,12 +1999,12 @@
|
|
|
| this._context.save();
|
| this._context.beginPath();
|
| -this._context.font = "9px monospace";
|
| +this._context.font = 9 * window.devicePixelRatio + "px monospace";
|
| this._context.textAlign = "right";
|
| this._context.textBaseline = "top";
|
|
|
| -const labelPadding = 2;
|
| -var lineHeight = 12;
|
| +const labelPadding = 2 * window.devicePixelRatio;
|
| +var lineHeight = 12 * window.devicePixelRatio;
|
| var labelTopMargin = 0;
|
|
|
| for (var i = 0; i < fpsMarks.length; ++i) {
|
| @@ -2033,7 +2032,7 @@
|
| this._context.fillText(label, labelX, labelY);
|
| labelTopMargin = labelY + lineHeight;
|
| }
|
| -this._context.strokeStyle = "rgb(51, 51, 51)";
|
| +this._context.strokeStyle = "rgb(0, 0, 0, 0.3)";
|
| this._context.stroke();
|
| this._context.restore();
|
| },
|
| @@ -2073,7 +2072,7 @@
|
| var y0 = Math.floor(this._canvas.height - frame.duration * scale) + 0.5;
|
| var y1 = this._canvas.height + 0.5;
|
|
|
| -this._context.strokeStyle = "rgb(90, 90, 90)";
|
| +this._context.strokeStyle = "rgba(90, 90, 90, 0.3)";
|
| this._context.beginPath();
|
| this._context.moveTo(x, y1);
|
| this._context.lineTo(x, y0);
|
| @@ -2134,7 +2133,7 @@
|
| scripting: new WebInspector.TimelineCategory("scripting", WebInspector.UIString("Scripting"), 1, "#D8AA34", "#F3D07A", "#F1C453"),
|
| rendering: new WebInspector.TimelineCategory("rendering", WebInspector.UIString("Rendering"), 2, "#8266CC", "#AF9AEB", "#9A7EE6"),
|
| painting: new WebInspector.TimelineCategory("painting", WebInspector.UIString("Painting"), 2, "#5FA050", "#8DC286", "#71B363"),
|
| -other: new WebInspector.TimelineCategory("other", WebInspector.UIString("Other"), -1, "#BBBBBB", "#DDDDDD", "#EEEEEE")
|
| +other: new WebInspector.TimelineCategory("other", WebInspector.UIString("Other"), -1, "#BBBBBB", "#DDDDDD", "#DDDDDD")
|
| };
|
| return WebInspector.TimelinePresentationModel._categories;
|
| };
|
| @@ -2378,17 +2377,16 @@
|
| origin = parentRecord;
|
| parentRecord = newParentRecord;
|
| }
|
| -if (parentRecord === this._rootRecord) {
|
|
|
| +if (parentRecord === this._rootRecord)
|
| coalescingBucket = record.thread ? record.type : "mainThread";
|
| -var coalescedRecord = this._findCoalescedParent(record, coalescingBucket);
|
| +var coalescedRecord = this._findCoalescedParent(record, parentRecord, coalescingBucket);
|
| if (coalescedRecord) {
|
| if (!origin)
|
| origin = parentRecord;
|
| parentRecord = coalescedRecord;
|
| }
|
| }
|
| -}
|
|
|
| var children = record.children;
|
| var scriptDetails;
|
| @@ -2455,11 +2453,13 @@
|
| },
|
|
|
|
|
| -_findCoalescedParent: function(record, bucket)
|
| +_findCoalescedParent: function(record, newParent, bucket)
|
| {
|
| -const coalescingThresholdSeconds = 0.001;
|
| +const coalescingThresholdSeconds = 0.005;
|
|
|
| -var lastRecord = this._coalescingBuckets[bucket];
|
| +var lastRecord = bucket ? this._coalescingBuckets[bucket] : newParent.children.peekLast();
|
| +if (lastRecord && lastRecord.coalesced)
|
| +lastRecord = lastRecord.children.peekLast();
|
| var startTime = WebInspector.TimelineModel.startTimeInSeconds(record);
|
| var endTime = WebInspector.TimelineModel.endTimeInSeconds(record);
|
| if (!lastRecord || lastRecord.type !== record.type)
|
| @@ -2470,9 +2470,6 @@
|
| return null;
|
| if (lastRecord.parent.coalesced)
|
| return lastRecord.parent;
|
| -
|
| -if (lastRecord.parent !== this._rootRecord)
|
| -return null;
|
| return this._replaceWithCoalescedRecord(lastRecord);
|
| },
|
|
|
| @@ -3139,7 +3136,7 @@
|
| if (typeof this._detailsNode === "undefined") {
|
| this._detailsNode = this._getRecordDetails();
|
|
|
| -if (this._detailsNode) {
|
| +if (this._detailsNode && !this.coalesced) {
|
| this._detailsNode.insertBefore(document.createTextNode("("), this._detailsNode.firstChild);
|
| this._detailsNode.appendChild(document.createTextNode(")"));
|
| }
|
| @@ -3373,7 +3370,7 @@
|
| ".timeline-category-" + category.name + " .timeline-tree-icon"
|
|
|
| return selector + " { background-image: -webkit-linear-gradient(" +
|
| -category.fillColorStop0 + ", " + category.fillColorStop1 + " 25%, " + category.fillColorStop1 + " 75%, " + category.borderColor + ");" +
|
| +category.fillColorStop0 + ", " + category.fillColorStop1 + " 25%, " + category.fillColorStop1 + " 25%, " + category.fillColorStop1 + ");" +
|
| " border-color: " + category.borderColor +
|
| "}";
|
| }
|
| @@ -3833,13 +3830,19 @@
|
| labelContainer.addStyleClass("status-bar-item");
|
|
|
| var label = document.createElement("label");
|
| -var checkElement = document.createElement("input");
|
| +var checkBorder = label.createChild("div", "timeline-category-checkbox");
|
| +var checkElement = checkBorder.createChild("div", "timeline-category-checkbox-check timeline-category-checkbox-checked");
|
| checkElement.type = "checkbox";
|
| -checkElement.className = "timeline-category-checkbox";
|
| checkElement.checked = true;
|
| -checkElement.addEventListener("click", onCheckboxClicked, false);
|
| -label.appendChild(checkElement);
|
| +checkElement.addEventListener("click", listener, false);
|
|
|
| +function listener(event)
|
| +{
|
| +checkElement.checked = !checkElement.checked;
|
| +checkElement.enableStyleClass("timeline-category-checkbox-checked", checkElement.checked);
|
| +onCheckboxClicked(event);
|
| +}
|
| +
|
| var typeElement = document.createElement("span");
|
| typeElement.className = "type";
|
| typeElement.textContent = category.title;
|
| @@ -4335,18 +4338,22 @@
|
| _revealRecord: function(recordToReveal)
|
| {
|
|
|
| -this._recordToHighlight = recordToReveal;
|
| -var treeUpdated = false;
|
| for (var parent = recordToReveal.parent; parent !== this._rootRecord(); parent = parent.parent) {
|
| -treeUpdated = treeUpdated || parent.collapsed;
|
| +if (!parent.collapsed)
|
| +continue;
|
| +this._presentationModel.invalidateFilteredRecords();
|
| parent.collapsed = false;
|
| }
|
| -if (treeUpdated)
|
| -this._invalidateAndScheduleRefresh(true, true);
|
| -
|
| var recordsInWindow = this._presentationModel.filteredRecords();
|
| var index = recordsInWindow.indexOf(recordToReveal);
|
| +this._recordToHighlight = recordToReveal;
|
| +var oldScrollTop = this._containerElement.scrollTop;
|
| this._containerElement.scrollTop = index * WebInspector.TimelinePanel.rowHeight;
|
| +
|
| +
|
| +
|
| +if (this._containerElement.scrollTop === oldScrollTop)
|
| +this._refresh();
|
| },
|
|
|
| _refreshRecords: function()
|
| @@ -4386,9 +4393,10 @@
|
| this._itemsGraphsElement.removeChild(this._expandElements);
|
| this._expandElements.removeChildren();
|
|
|
| -this._clearRecordHighlight();
|
| var highlightedRecord = this._recordToHighlight;
|
| delete this._recordToHighlight;
|
| +var highlightedListRowElement;
|
| +var highlightedGraphRowElement;
|
|
|
| for (var i = 0; i < endIndex; ++i) {
|
| var record = recordsInWindow[i];
|
| @@ -4412,8 +4420,8 @@
|
| }
|
|
|
| if (highlightedRecord === record) {
|
| -this._highlightedListRowElement = listRowElement;
|
| -this._highlightedGraphRowElement = graphRowElement;
|
| +highlightedListRowElement = listRowElement;
|
| +highlightedGraphRowElement = graphRowElement;
|
| }
|
|
|
| listRowElement.row.update(record, isEven, visibleTop);
|
| @@ -4441,24 +4449,14 @@
|
| this._adjustScrollPosition((recordsInWindow.length + this._headerLineCount) * rowHeight);
|
| this._updateSearchHighlight(false);
|
|
|
| -if (this._highlightedListRowElement) {
|
| -this._highlightedListRowElement.addStyleClass("highlighted-timeline-record");
|
| -this._highlightedGraphRowElement.addStyleClass("highlighted-timeline-record");
|
| +if (highlightedListRowElement) {
|
| +highlightedListRowElement.addStyleClass("highlighted-timeline-record");
|
| +highlightedGraphRowElement.addStyleClass("highlighted-timeline-record");
|
| }
|
|
|
| return recordsInWindow.length;
|
| },
|
|
|
| -_clearRecordHighlight: function()
|
| -{
|
| -if (!this._highlightedListRowElement)
|
| -return;
|
| -this._highlightedListRowElement.removeStyleClass("highlighted-timeline-record");
|
| -delete this._highlightedListRowElement;
|
| -this._highlightedGraphRowElement.removeStyleClass("highlighted-timeline-record");
|
| -delete this._highlightedGraphRowElement;
|
| -},
|
| -
|
| _refreshMainThreadBars: function()
|
| {
|
| const barOffset = 3;
|
| @@ -4983,14 +4981,9 @@
|
|
|
| WebInspector.TimelineExpandableElement = function(container)
|
| {
|
| -this._element = document.createElement("div");
|
| -this._element.className = "timeline-expandable";
|
| -
|
| -var leftBorder = document.createElement("div");
|
| -leftBorder.className = "timeline-expandable-left";
|
| -this._element.appendChild(leftBorder);
|
| -
|
| -container.appendChild(this._element);
|
| +this._element = container.createChild("div", "timeline-expandable");
|
| +this._element.createChild("div", "timeline-expandable-left");
|
| +this._element.createChild("div", "timeline-expandable-arrow");
|
| }
|
|
|
| WebInspector.TimelineExpandableElement.prototype = {
|
|
|