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

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

Issue 8342069: Add unit tests for about:tracing TimelineModel. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: . Created 9 years, 2 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 | chrome/browser/resources/tracing/timeline_model_test.html » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/resources/tracing/timeline_model.js
diff --git a/chrome/browser/resources/tracing/timeline_model.js b/chrome/browser/resources/tracing/timeline_model.js
index 35858186d5c81e5734687349cabb53f0bab059ca..14865f88d1e61a5420f258b3f0094cf0c32bb902 100644
--- a/chrome/browser/resources/tracing/timeline_model.js
+++ b/chrome/browser/resources/tracing/timeline_model.js
@@ -120,8 +120,8 @@ cr.define('tracing', function() {
* Comparison between threads that orders first by pid,
* then by names, then by tid.
*/
- TimelineThread.compare = function(x,y) {
- if(x.parent.pid != y.parent.pid) {
+ TimelineThread.compare = function(x, y) {
+ if (x.parent.pid != y.parent.pid) {
return x.parent.pid - y.parent.pid;
}
@@ -132,7 +132,7 @@ cr.define('tracing', function() {
return tmp;
} else if (x.name) {
return -1;
- } else if (y.name){
+ } else if (y.name) {
return 1;
} else {
return x.tid - y.tid;
@@ -152,7 +152,15 @@ cr.define('tracing', function() {
};
TimelineProcess.prototype = {
- getThread: function(tid) {
+ get numThreads() {
+ var n = 0;
+ for (var p in this.threads) {
+ n++;
+ }
+ return n;
+ },
+
+ getOrCreateThread: function(tid) {
if (!this.threads[tid])
this.threads[tid] = new TimelineThread(this, tid);
return this.threads[tid];
@@ -160,6 +168,18 @@ cr.define('tracing', function() {
};
/**
+ * Computes a simplistic hashcode of the provide name. Used to chose colors
+ * for slices.
+ * @param {string} name The string to hash.
+ */
+ function getStringHash(name) {
+ var hash = 0;
+ for (var i = 0; i < name.length; ++i)
+ hash = (hash + 37 * hash + 11 * name.charCodeAt(i)) % 0xFFFFFFFF;
+ return hash;
+ }
+
+ /**
* Builds a model from an array of TraceEvent objects.
* @param {Array} events An array of TraceEvents created by
* TraceEvent.ToJSON().
@@ -176,7 +196,14 @@ cr.define('tracing', function() {
TimelineModel.prototype = {
__proto__: cr.EventTarget.prototype,
- getProcess: function(pid) {
+ get numProcesses() {
+ var n = 0;
+ for (var p in this.processes)
+ n++;
+ return n;
+ },
+
+ getOrCreateProcess: function(pid) {
if (!this.processes[pid])
this.processes[pid] = new TimelineProcess(pid);
return this.processes[pid];
@@ -202,11 +229,7 @@ cr.define('tracing', function() {
var nameToColorMap = {};
function getColor(name) {
if (!(name in nameToColorMap)) {
- // Compute a simplistic hashcode of the string so we get consistent
- // coloring across traces.
- var hash = 0;
- for (var i = 0; i < name.length; ++i)
- hash = (hash + 37 * hash + 11 * name.charCodeAt(i)) % 0xFFFFFFFF;
+ var hash = getStringHash(name);
nameToColorMap[name] = hash % numColorIds;
}
return nameToColorMap[name];
@@ -253,7 +276,8 @@ cr.define('tracing', function() {
slice.slice.duration = event.ts - slice.slice.start;
// Store the slice in a non-nested subrow.
- var thread = self.getProcess(event.pid).getThread(event.tid);
+ var thread = self.getOrCreateProcess(event.pid).
+ getOrCreateThread(event.tid);
thread.addNonNestedSlice(slice.slice);
delete state.openNonNestedSlices[name];
} else {
@@ -265,7 +289,8 @@ cr.define('tracing', function() {
slice.duration = event.ts - slice.start;
// Store the slice on the correct subrow.
- var thread = self.getProcess(event.pid).getThread(event.tid);
+ var thread = self.getOrCreateProcess(event.pid)
+ .getOrCreateThread(event.tid);
var subRowIndex = state.openSlices.length;
thread.getSubrow(subRowIndex).push(slice);
@@ -297,14 +322,15 @@ cr.define('tracing', function() {
processEnd(state, event);
} else if (event.ph == 'M') {
if (event.name == 'thread_name') {
- var thread = this.getProcess(event.pid).getThread(event.tid);
+ var thread = this.getOrCreateProcess(event.pid)
+ .getOrCreateThread(event.tid);
thread.name = event.args.name;
} else {
this.importErrors.push('Unrecognized metadata name: ' + event.name);
}
} else {
this.importErrors.push('Unrecognized event phase: ' + event.ph +
- '(' + event.name + ')');
+ '(' + event.name + ')');
}
}
this.pruneEmptyThreads();
@@ -322,7 +348,8 @@ cr.define('tracing', function() {
var event = events[slice.index];
// Store the slice on the correct subrow.
- var thread = this.getProcess(event.pid).getThread(event.tid);
+ var thread = this.getOrCreateProcess(event.pid)
+ .getOrCreateThread(event.tid);
var subRowIndex = state.openSlices.length;
thread.getSubrow(subRowIndex).push(slice.slice);
@@ -347,11 +374,11 @@ cr.define('tracing', function() {
pruneEmptyThreads: function() {
for (var pid in this.processes) {
var process = this.processes[pid];
- var prunedThreads = [];
+ var prunedThreads = {};
for (var tid in process.threads) {
var thread = process.threads[tid];
if (thread.subRows[0].length || thread.nonNestedSubRows.legnth)
- prunedThreads.push(thread);
+ prunedThreads[tid] = thread;
}
process.threads = prunedThreads;
}
@@ -411,6 +438,7 @@ cr.define('tracing', function() {
};
return {
+ getStringHash: getStringHash,
TimelineSlice: TimelineSlice,
TimelineThread: TimelineThread,
TimelineProcess: TimelineProcess,
« no previous file with comments | « no previous file | chrome/browser/resources/tracing/timeline_model_test.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698