Index: chrome/browser/resources/tracing/timeline_model_test.html |
diff --git a/chrome/browser/resources/tracing/timeline_model_test.html b/chrome/browser/resources/tracing/timeline_model_test.html |
index 84c6d4eedda4f2aeda7b9f5be3951f97b3c6e2a8..d8a424dae910b3d72f1479b41cbeedb38d3f6549 100644 |
--- a/chrome/browser/resources/tracing/timeline_model_test.html |
+++ b/chrome/browser/resources/tracing/timeline_model_test.html |
@@ -6,7 +6,7 @@ Use of this source code is governed by a BSD-style license that can be |
found in the LICENSE file. |
--> |
<head> |
-<title></title> |
+<title>TimelineModel tests</title> |
<script src="http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js"></script> |
<script src="../shared/js/cr.js"></script> |
<script src="../shared/js/cr/event_target.js"></script> |
@@ -55,7 +55,7 @@ function testNestedParsing() { |
{name: 'a', args: {}, pid: 1, ts: 1, cat: 'foo', tid: 1, ph: 'B'}, |
{name: 'b', args: {}, pid: 1, ts: 2, cat: 'foo', tid: 1, ph: 'B'}, |
{name: 'b', args: {}, pid: 1, ts: 3, cat: 'foo', tid: 1, ph: 'E'}, |
- {name: 'a', args: {}, pid: 1, ts: 4, cat: 'foo', tid: 1, ph: 'E'}, |
+ {name: 'a', args: {}, pid: 1, ts: 4, cat: 'foo', tid: 1, ph: 'E'} |
]; |
var m = new tracing.TimelineModel(events); |
var p = m.processes[1]; |
@@ -81,12 +81,12 @@ function testNestedParsing() { |
function testAutoclosing() { |
var events = [ |
- // Slice that doesn't finish |
+ // Slice that doesn't finish. |
{name: 'a', args: {}, pid: 1, ts: 1, cat: 'foo', tid: 1, ph: 'B'}, |
- // Slice that does finish to give an 'end time' to make autoclosing work |
+ // Slice that does finish to give an 'end time' to make autoclosing work. |
{name: 'b', args: {}, pid: 1, ts: 1, cat: 'foo', tid: 2, ph: 'B'}, |
- {name: 'b', args: {}, pid: 1, ts: 2, cat: 'foo', tid: 2, ph: 'E'}, |
+ {name: 'b', args: {}, pid: 1, ts: 2, cat: 'foo', tid: 2, ph: 'E'} |
]; |
var m = new tracing.TimelineModel(events); |
var p = m.processes[1]; |
@@ -102,13 +102,13 @@ function testAutoclosing() { |
function testNestedAutoclosing() { |
var events = [ |
- // Tasks that dont finish |
+ // Tasks that dont finish. |
{name: 'a1', args: {}, pid: 1, ts: 1, cat: 'foo', tid: 1, ph: 'B'}, |
{name: 'a2', args: {}, pid: 1, ts: 1.5, cat: 'foo', tid: 1, ph: 'B'}, |
- // Slice that does finish to give an 'end time' to make autoclosing work |
+ // Slice that does finish to give an 'end time' to make autoclosing work. |
{name: 'b', args: {}, pid: 1, ts: 1, cat: 'foo', tid: 2, ph: 'B'}, |
- {name: 'b', args: {}, pid: 1, ts: 2, cat: 'foo', tid: 2, ph: 'E'}, |
+ {name: 'b', args: {}, pid: 1, ts: 2, cat: 'foo', tid: 2, ph: 'E'} |
]; |
var m = new tracing.TimelineModel(events); |
var p = m.processes[1]; |
@@ -138,7 +138,7 @@ function testTaskColoring() { |
{name: 'b', args: {}, pid: 1, ts: 3, cat: 'foo', tid: 1, ph: 'B'}, |
{name: 'b', args: {}, pid: 1, ts: 4, cat: 'foo', tid: 1, ph: 'E'}, |
{name: 'a', args: {}, pid: 1, ts: 5, cat: 'foo', tid: 1, ph: 'B'}, |
- {name: 'a', args: {}, pid: 1, ts: 6, cat: 'foo', tid: 1, ph: 'E'}, |
+ {name: 'a', args: {}, pid: 1, ts: 6, cat: 'foo', tid: 1, ph: 'E'} |
]; |
var m = new tracing.TimelineModel(events); |
var p = m.processes[1]; |
@@ -168,7 +168,7 @@ function testMultipleThreadParsing() { |
assertEquals(2, p.numThreads); |
- // Check thread 1 |
+ // Check thread 1. |
var t = p.threads[1]; |
assertNotUndefined(t); |
assertEquals(1, t.subRows.length); |
@@ -182,7 +182,7 @@ function testMultipleThreadParsing() { |
assertEquals((2 - 1) / 1000, slice.duration); |
assertEquals(0, slice.subSlices.length); |
- // Check thread 2 |
+ // Check thread 2. |
var t = p.threads[2]; |
assertNotUndefined(t); |
assertEquals(1, t.subRows.length); |
@@ -211,7 +211,7 @@ function testMultiplePidParsing() { |
assertEquals(1, p.numThreads); |
- // Check process 1 thread 1 |
+ // Check process 1 thread 1. |
var t = p.threads[1]; |
assertNotUndefined(t); |
assertEquals(1, t.subRows.length); |
@@ -225,7 +225,7 @@ function testMultiplePidParsing() { |
assertEquals((2 - 1) / 1000, slice.duration); |
assertEquals(0, slice.subSlices.length); |
- // Check process 2 thread 2 |
+ // Check process 2 thread 2. |
var p = m.processes[2]; |
assertNotUndefined(p); |
assertEquals(1, p.numThreads); |
@@ -244,34 +244,34 @@ function testMultiplePidParsing() { |
// Check getAllThreads. |
assertArrayEquals([m.processes[1].threads[1], m.processes[2].threads[2]], |
- m.getAllThreads()) |
+ m.getAllThreads()); |
} |
-// Thread names |
+// Thread names. |
function testThreadNames() { |
var events = [ |
{name: 'thread_name', args: {name: 'Thread 1'}, |
- pid: 1, ts: 0, tid: 1, ph: 'M'}, |
+ pid: 1, ts: 0, tid: 1, ph: 'M'}, |
{name: 'a', args: {}, pid: 1, ts: 1, cat: 'foo', tid: 1, ph: 'B'}, |
{name: 'a', args: {}, pid: 1, ts: 2, cat: 'foo', tid: 1, ph: 'E'}, |
{name: 'b', args: {}, pid: 2, ts: 3, cat: 'foo', tid: 2, ph: 'B'}, |
{name: 'b', args: {}, pid: 2, ts: 4, cat: 'foo', tid: 2, ph: 'E'}, |
{name: 'thread_name', args: {name: 'Thread 2'}, |
- pid: 2, ts: 0, tid: 2, ph: 'M'}, |
+ pid: 2, ts: 0, tid: 2, ph: 'M'} |
]; |
var m = new tracing.TimelineModel(events); |
assertEquals('Thread 1', m.processes[1].threads[1].name); |
assertEquals('Thread 2', m.processes[2].threads[2].name); |
} |
-// User time |
+// User time. |
function testUserTime() { |
var events = [ |
{name: 'thread_name', args: {name: 'Thread 1'}, |
- pid: 1, ts: 0, tid: 1, ph: 'M'}, |
+ pid: 1, ts: 0, tid: 1, ph: 'M'}, |
{name: 'a', args: {}, pid: 1, ts: 1, uts: 70, cat: 'foo', tid: 1, ph: 'B'}, |
{name: 'a', args: {}, pid: 1, ts: 2, uts: 77, cat: 'foo', tid: 1, ph: 'E'}, |
- {name: 'a', args: {}, pid: 1, ts: 2 , uts: 80, cat: 'foo', tid: 1, ph: 'I'}, |
+ {name: 'a', args: {}, pid: 1, ts: 2 , uts: 80, cat: 'foo', tid: 1, ph: 'I'} |
]; |
var m = new tracing.TimelineModel(events); |
var subRow = m.processes[1].threads[1].subRows[0]; |
@@ -288,7 +288,7 @@ function testImmediateParsing() { |
// recentering/zeroing doesn't clobber their timestamp. |
{name: 'a', args: {}, pid: 1, ts: 1, cat: 'foo', tid: 1, ph: 'B'}, |
{name: 'immediate', args: {}, pid: 1, ts: 2, cat: 'foo', tid: 1, ph: 'I'}, |
- {name: 'a', args: {}, pid: 1, ts: 4, cat: 'foo', tid: 1, ph: 'E'}, |
+ {name: 'a', args: {}, pid: 1, ts: 4, cat: 'foo', tid: 1, ph: 'E'} |
]; |
var m = new tracing.TimelineModel(events); |
var p = m.processes[1]; |
@@ -310,6 +310,93 @@ function testImmediateParsing() { |
subRow = t.subRows[1]; |
assertEquals(immed, subRow[0]); |
} |
+ |
+function testSimpleCounter() { |
+ var events = [ |
+ {name: 'ctr', args: {'value': 0}, pid: 1, ts: 0, cat: 'foo', tid: 1, |
+ ph: 'C'}, |
+ {name: 'ctr', args: {'value': 10}, pid: 1, ts: 10, cat: 'foo', tid: 1, |
+ ph: 'C'}, |
+ {name: 'ctr', args: {'value': 0}, pid: 1, ts: 20, cat: 'foo', tid: 1, |
+ ph: 'C'} |
+ |
+ ]; |
+ var m = new tracing.TimelineModel(events); |
+ var p = m.processes[1]; |
+ var ctr = m.processes[1].counters['ctr']; |
+ |
+ assertEquals('ctr', ctr.name); |
+ assertEquals(3, ctr.numSamples); |
+ assertEquals(1, ctr.numSeries); |
+ |
+ assertArrayEquals(['value'], ctr.seriesNames); |
+ assertArrayEquals([tracing.getStringHash('ctr.value')], ctr.seriesColors); |
+ assertArrayEquals([0, 0.01, 0.02], ctr.timestamps); |
+ assertArrayEquals([0, 10, 0], ctr.samples); |
+ assertArrayEquals([0, 10, 0], ctr.totals); |
+ assertEquals(10, ctr.maxTotal); |
+} |
+ |
+function testMultiCounterUpdateBounds() { |
+ var ctr = new tracing.TimelineCounter(undefined, 'testBasicCounter'); |
+ ctr.numSeries = 1; |
+ ctr.seriesNames = ['value1', 'value2']; |
+ ctr.seriesColors = ['testBasicCounter.value1', 'testBasicCounter.value2']; |
+ ctr.timestamps = [0, 1, 2, 3, 4, 5, 6, 7]; |
+ ctr.samples = [0, 0, |
+ 1, 0, |
+ 1, 1, |
+ 2, 1.1, |
+ 3, 0, |
+ 1, 7, |
+ 3, 0, |
+ 3.1, 0.5]; |
+ ctr.updateBounds(); |
+ assertEquals(0, ctr.minTimestamp); |
+ assertEquals(7, ctr.maxTimestamp); |
+ assertEquals(8, ctr.maxTotal); |
+ assertArrayEquals([0, 0, |
+ 1, 1, |
+ 1, 2, |
+ 2, 3.1, |
+ 3, 3, |
+ 1, 8, |
+ 3, 3, |
+ 3.1, 3.6], ctr.totals); |
+} |
+ |
+function testMultiCounter() { |
+ var events = [ |
+ {name: 'ctr', args: {'value1': 0, 'value2': 7}, pid: 1, ts: 0, cat: 'foo', |
+ tid: 1, ph: 'C'}, |
+ {name: 'ctr', args: {'value1': 10, 'value2': 4}, pid: 1, ts: 10, cat: 'foo', |
+ tid: 1, ph: 'C'}, |
+ {name: 'ctr', args: {'value1': 0, 'value2': 1 }, pid: 1, ts: 20, cat: 'foo', |
+ tid: 1, ph: 'C'} |
+ ]; |
+ var m = new tracing.TimelineModel(events); |
+ var p = m.processes[1]; |
+ var ctr = m.processes[1].counters['ctr']; |
+ assertEquals('ctr', ctr.name); |
+ |
+ assertEquals('ctr', ctr.name); |
+ assertEquals(3, ctr.numSamples); |
+ assertEquals(2, ctr.numSeries); |
+ |
+ assertArrayEquals(['value1', 'value2'], ctr.seriesNames); |
+ assertArrayEquals([tracing.getStringHash('ctr.value1'), |
+ tracing.getStringHash('ctr.value2')], |
+ ctr.seriesColors); |
+ assertArrayEquals([0, 0.01, 0.02], ctr.timestamps); |
+ assertArrayEquals([0, 7, |
+ 10, 4, |
+ 0, 1], ctr.samples); |
+ assertArrayEquals([0, 7, |
+ 10, 14, |
+ 0, 1], ctr.totals); |
+ assertEquals(14, ctr.maxTotal); |
+} |
+ |
</script> |
</body> |
</html> |