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

Unified Diff: tools/profview/profview.js

Issue 2732883004: [profiler] Web UI - add time-as-text description to the interval highlight. (Closed)
Patch Set: Created 3 years, 9 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/profview/profview.js
diff --git a/tools/profview/profview.js b/tools/profview/profview.js
index 9a42a68e63d4f54f79567a1f67ff3a2a6fca2168..6186c09742b827e651daae6093e7ca9231c7bbc9 100644
--- a/tools/profview/profview.js
+++ b/tools/profview/profview.js
@@ -153,7 +153,7 @@ let main = {
onResize() {
main.setTimeLineDimensions(
- window.innerWidth - 20, window.innerHeight / 8);
+ window.innerWidth - 20, window.innerHeight / 5);
},
onLoad() {
@@ -628,6 +628,9 @@ class TimelineView {
this.selectionEnd = null;
this.selecting = false;
+ this.fontSize = 12;
+ this.imageOffset = this.fontSize * 1.2;
+
this.currentState = null;
}
@@ -684,17 +687,68 @@ class TimelineView {
drawSelection() {
let ctx = this.canvas.getContext("2d");
- ctx.drawImage(this.buffer, 0, 0);
+ // Draw the timeline image.
+ ctx.drawImage(this.buffer, 0, this.imageOffset);
+
+ // Draw the current interval highlight.
+ let left;
+ let right;
if (this.selectionStart !== null && this.selectionEnd !== null) {
ctx.fillStyle = "rgba(0, 0, 0, 0.3)";
- let left = Math.min(this.selectionStart, this.selectionEnd);
- let right = Math.max(this.selectionStart, this.selectionEnd);
- ctx.fillRect(0, 0, left, this.buffer.height);
- ctx.fillRect(right, 0, this.buffer.width - right, this.buffer.height);
+ left = Math.min(this.selectionStart, this.selectionEnd);
+ right = Math.max(this.selectionStart, this.selectionEnd);
+ ctx.fillRect(0, this.imageOffset, left, this.buffer.height);
+ ctx.fillRect(right, this.imageOffset, this.buffer.width - right,
+ this.buffer.height);
+ } else {
+ left = 0;
+ right = this.buffer.width;
}
- }
+ // Draw the scale text.
+ let file = this.currentState.file;
+ ctx.fillStyle = "white";
+ ctx.fillRect(0, 0, this.canvas.width, this.imageOffset);
+ if (file && file.ticks.length > 0) {
+ let firstTime = file.ticks[0].tm;
+ let lastTime = file.ticks[file.ticks.length - 1].tm;
+
+ let leftTime =
+ firstTime + left / this.canvas.width * (lastTime - firstTime);
+ let rightTime =
+ firstTime + right / this.canvas.width * (lastTime - firstTime);
+
+ let leftText = (leftTime / 1000000).toFixed(3) + "s";
+ let rightText = (rightTime / 1000000).toFixed(3) + "s";
+
+ ctx.textBaseline = 'top';
+ ctx.font = this.fontSize + "px Arial";
+ ctx.fillStyle = "black";
+
+ let leftWidth = ctx.measureText(leftText).width;
+ let rightWidth = ctx.measureText(rightText).width;
+
+ let leftStart = left - leftWidth / 2;
+ let rightStart = right - rightWidth / 2;
+
+ if (leftStart < 0) leftStart = 0;
+ if (rightStart + rightWidth > this.canvas.width) {
+ rightStart = this.canvas.width - rightWidth;
+ }
+ if (leftStart + leftWidth > rightStart) {
+ if (leftStart > this.canvas.width - (rightStart - rightWidth)) {
+ rightStart = leftStart + leftWidth;
+
+ } else {
+ leftStart = rightStart - leftWidth;
+ }
+ }
+
+ ctx.fillText(leftText, leftStart, 0);
+ ctx.fillText(rightText, rightStart, 0);
+ }
+ }
render(newState) {
let oldState = this.currentState;
@@ -720,8 +774,12 @@ class TimelineView {
// Make sure the canvas has the right dimensions.
let width = this.currentState.timeLine.width;
+ let height = this.currentState.timeLine.height;
this.canvas.width = width;
- this.canvas.height = this.currentState.timeLine.height;
+ this.canvas.height = height;
+
+ // Make space for the selection text.
+ height -= this.imageOffset;
let file = this.currentState.file;
if (!file) return;
@@ -746,11 +804,11 @@ class TimelineView {
let buffer = document.createElement("canvas");
- buffer.width = this.canvas.width;
- buffer.height = this.canvas.height;
+ buffer.width = width;
+ buffer.height = height;
// Calculate the bar heights for each bucket.
- let graphHeight = buffer.height;
+ let graphHeight = height;
let buckets = stackProcessor.buckets;
let bucketsGraph = [];
for (let i = 0; i < buckets.length; i++) {
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698