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

Unified Diff: chrome/browser/resources/tracing/timeline_track.js

Issue 9706010: about:tracing support for TRACE_ASYNC_START/FINISH events. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: try again Created 8 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
Index: chrome/browser/resources/tracing/timeline_track.js
diff --git a/chrome/browser/resources/tracing/timeline_track.js b/chrome/browser/resources/tracing/timeline_track.js
index 0d00b1e822c3630c3bd8a521c46e2fad0c9fe086..3f571858ea37957239d51b25ad51f7ba6d5c175e 100644
--- a/chrome/browser/resources/tracing/timeline_track.js
+++ b/chrome/browser/resources/tracing/timeline_track.js
@@ -111,6 +111,17 @@ cr.define('tracing', function() {
}
};
+ function addCloseButtonElement(el) {
+ var closeEl = document.createElement('div');
+ closeEl.classList.add('timeline-track-button');
+ closeEl.classList.add('timeline-track-close-button');
+ closeEl.textContent = String.fromCharCode(215); // ×
+ closeEl.addEventListener('click', function() {
+ el.style.display = 'None';
+ });
+ el.appendChild(closeEl);
+ }
+
/**
* Visualizes a TimelineThread using a series of of TimelineSliceTracks.
* @constructor
@@ -181,12 +192,18 @@ cr.define('tracing', function() {
track.height = '4px';
}
- for (var srI = 0; srI < this.thread_.nonNestedSubRows.length; ++srI) {
- this.addTrack_(this.thread_.nonNestedSubRows[srI]);
+ if (this.thread_.asyncSlices.length) {
+ var subRows = this.thread_.asyncSlices.subRows;
+ for (var srI = 0; srI < subRows.length; srI++) {
+ var track = this.addTrack_(subRows[srI]);
+ track.asyncStyle = true;
+ }
}
- for (var srI = 0; srI < this.thread_.subRows.length; ++srI) {
+
+ for (var srI = 0; srI < this.thread_.subRows.length; srI++) {
this.addTrack_(this.thread_.subRows[srI]);
}
+
if (this.tracks_.length > 0) {
if (this.thread_.cpuSlices) {
this.tracks_[1].heading = this.heading_;
@@ -197,6 +214,7 @@ cr.define('tracing', function() {
}
}
}
+ addCloseButtonElement(this);
}
};
@@ -264,6 +282,7 @@ cr.define('tracing', function() {
this.tracks_[0].heading = this.heading_;
this.tracks_[0].tooltip = this.tooltip_;
}
+ addCloseButtonElement(this);
}
};
@@ -366,58 +385,63 @@ cr.define('tracing', function() {
};
- /**
- * A pair representing an elided string and world-coordinate width
- * to draw it.
- * @constructor
+ /**
+ * A pair representing an elided string and world-coordinate width
+ * to draw it.
+ * @constructor
*/
- function ElidedStringWidthPair(string, width) {
- this.string = string;
- this.width = width;
- }
+ function ElidedStringWidthPair(string, width) {
+ this.string = string;
+ this.width = width;
+ }
+ /**
+ * A cache for elided strings.
+ * @constructor
+ */
+ function ElidedTitleCache() {
+ }
+
+ ElidedTitleCache.prototype = {
/**
- * A cache for elided strings.
- * @constructor
- */
- function ElidedTitleCache() {
- }
-
- ElidedTitleCache.prototype = {
- /**
- * Return elided text.
- * @param {track} A timeline slice track or other object that defines
- * functions labelWidth() and labelWidthWorld().
- * @param {pixWidth} Pixel width.
- * @param {title} Original title text.
- * @param {width} Drawn width in world coords.
- * @param {sliceDuration} Where the title must fit (in world coords).
- * @return {ElidedStringWidthPair} Elided string and width.
- */
- get: function(track, pixWidth, title, width, sliceDuration) {
- var elidedDict = elidedTitleCacheDict[title];
- if (!elidedDict) {
- elidedDict = {};
- elidedTitleCacheDict[title] = elidedDict;
- }
- var stringWidthPair = elidedDict[sliceDuration];
- if (stringWidthPair === undefined) {
- var newtitle = title;
- var elided = false;
- while (track.labelWidthWorld(newtitle, pixWidth) > sliceDuration) {
- newtitle = newtitle.substring(0, newtitle.length * 0.75);
- elided = true;
- }
- if (elided && newtitle.length > 3)
- newtitle = newtitle.substring(0, newtitle.length - 3) + '...';
- stringWidthPair = new ElidedStringWidthPair(
- newtitle,
- track.labelWidth(newtitle));
- elidedDict[sliceDuration] = stringWidthPair;
- }
- return stringWidthPair;
- },
- };
+ * Return elided text.
+ * @param {track} A timeline slice track or other object that defines
+ * functions labelWidth() and labelWidthWorld().
+ * @param {pixWidth} Pixel width.
+ * @param {title} Original title text.
+ * @param {width} Drawn width in world coords.
+ * @param {sliceDuration} Where the title must fit (in world coords).
+ * @return {ElidedStringWidthPair} Elided string and width.
+ */
+ get: function(track, pixWidth, title, width, sliceDuration) {
+ var elidedDict = elidedTitleCacheDict[title];
+ if (!elidedDict) {
+ elidedDict = {};
+ elidedTitleCacheDict[title] = elidedDict;
+ }
+ var elidedDictForPixWidth = elidedDict[pixWidth];
+ if (!elidedDictForPixWidth) {
+ elidedDict[pixWidth] = {};
+ elidedDictForPixWidth = elidedDict[pixWidth];
+ }
+ var stringWidthPair = elidedDictForPixWidth[sliceDuration];
+ if (stringWidthPair === undefined) {
+ var newtitle = title;
+ var elided = false;
+ while (track.labelWidthWorld(newtitle, pixWidth) > sliceDuration) {
+ newtitle = newtitle.substring(0, newtitle.length * 0.75);
+ elided = true;
+ }
+ if (elided && newtitle.length > 3)
+ newtitle = newtitle.substring(0, newtitle.length - 3) + '...';
+ stringWidthPair = new ElidedStringWidthPair(
+ newtitle,
+ track.labelWidth(newtitle));
+ elidedDictForPixWidth[sliceDuration] = stringWidthPair;
+ }
+ return stringWidthPair;
+ }
+ };
/**
* A track that displays an array of TimelineSlice objects.
@@ -431,18 +455,28 @@ cr.define('tracing', function() {
__proto__: CanvasBasedTrack.prototype,
- /**
- * Should we elide text on trace labels?
- * Without eliding, text that is too wide isn't drawn at all.
- * Disable if you feel this causes a performance problem.
- * This is a default value that can be overridden in tracks for testing.
- * @const
- */
+ /**
+ * Should we elide text on trace labels?
+ * Without eliding, text that is too wide isn't drawn at all.
+ * Disable if you feel this causes a performance problem.
+ * This is a default value that can be overridden in tracks for testing.
+ * @const
+ */
SHOULD_ELIDE_TEXT: true,
decorate: function() {
this.classList.add('timeline-slice-track');
this.elidedTitleCache = new ElidedTitleCache();
+ this.asyncStyle_ = false;
+ },
+
+ get asyncStyle() {
+ return this.asyncStyle_;
+ },
+
+ set asyncStyle(v) {
+ this.asyncStyle_ = !!v;
+ this.invalidate();
},
get slices() {
@@ -503,6 +537,8 @@ cr.define('tracing', function() {
vp.applyTransformToCanavs(ctx);
// Slices.
+ if (this.asyncStyle_)
+ ctx.globalAlpha = 0.25;
var tr = new tracing.FastRectRenderer(ctx, viewLWorld, 2 * pixWidth,
2 * pixWidth, viewRWorld, pallette);
tr.setYandH(0, canvasH);
@@ -560,12 +596,12 @@ cr.define('tracing', function() {
var drawnWidth = this.labelWidth(drawnTitle);
if (shouldElide &&
this.labelWidthWorld(drawnTitle, pixWidth) > slice.duration) {
- var elidedValues = this.elidedTitleCache.get(
- this, pixWidth,
- drawnTitle, drawnWidth,
- slice.duration);
- drawnTitle = elidedValues.string;
- drawnWidth = elidedValues.width;
+ var elidedValues = this.elidedTitleCache.get(
+ this, pixWidth,
+ drawnTitle, drawnWidth,
+ slice.duration);
+ drawnTitle = elidedValues.string;
+ drawnWidth = elidedValues.width;
}
if (drawnWidth * pixWidth < slice.duration) {
var cX = vp.xWorldToView(slice.start + 0.5 * slice.duration);
@@ -691,7 +727,7 @@ cr.define('tracing', function() {
const logOf10 = Math.log(10);
function log10(x) {
- return Math.log(x) / logOf10;;
+ return Math.log(x) / logOf10;
}
TimelineViewportTrack.prototype = {
@@ -729,10 +765,10 @@ cr.define('tracing', function() {
// exceeds the ideal mark distance.
var divisors = [10, 5, 2, 1];
for (var i = 0; i < divisors.length; ++i) {
- var tightenedGuess = conservativeGuess / divisors[i]
+ var tightenedGuess = conservativeGuess / divisors[i];
if (vp.xWorldVectorToView(tightenedGuess) < idealMajorMarkDistancePix)
continue;
- majorMarkDistanceWorld = conservativeGuess / divisors[i-1];
+ majorMarkDistanceWorld = conservativeGuess / divisors[i - 1];
break;
}
if (majorMarkDistanceWorld < 100) {
@@ -748,8 +784,8 @@ cr.define('tracing', function() {
var minorMarkDistancePx = vp.xWorldVectorToView(minorMarkDistanceWorld);
var firstMajorMark =
- Math.floor(viewLWorld / majorMarkDistanceWorld) *
- majorMarkDistanceWorld;
+ Math.floor(viewLWorld / majorMarkDistanceWorld) *
+ majorMarkDistanceWorld;
var minorTickH = Math.floor(canvasH * 0.25);
@@ -841,6 +877,7 @@ cr.define('tracing', function() {
decorate: function() {
this.classList.add('timeline-counter-track');
+ addCloseButtonElement(this);
},
get counter() {
« no previous file with comments | « chrome/browser/resources/tracing/timeline_test.html ('k') | chrome/browser/resources/tracing/timeline_track_test.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698