| 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 b95ab0a755a922c48d10384013a1a73169ab8a5b..cf231a945dd10ef0893b54531e24beb8e7c00d0a 100644
|
| --- a/chrome/browser/resources/tracing/timeline_model_test.html
|
| +++ b/chrome/browser/resources/tracing/timeline_model_test.html
|
| @@ -18,44 +18,47 @@ found in the LICENSE file.
|
| </head>
|
| <body>
|
| <script>
|
| +"use strict";
|
| var TimelineCpu = tracing.TimelineCpu;
|
| var TimelineSlice = tracing.TimelineSlice;
|
| +var TimelineThreadSlice = tracing.TimelineThreadSlice;
|
| var TimelineProcess = tracing.TimelineProcess;
|
| var TimelineThread = tracing.TimelineThread;
|
| var TimelineModel = tracing.TimelineModel;
|
| +var TimelineAsyncSlice = tracing.TimelineAsyncSlice;
|
| +var TimelineAsyncSliceGroup = tracing.TimelineAsyncSliceGroup;
|
| +
|
| +// Helper function to create a slice.
|
| +function newAsyncSlice(start, duration, startThread, endThread) {
|
| + var s = new TimelineAsyncSlice("a", 0, start);
|
| + s.duration = duration;
|
| + s.startThread = startThread;
|
| + s.endThread = endThread;
|
| + return s;
|
| +}
|
|
|
| function testThreadBounds_Empty() {
|
| - var t = new TimelineThread(undefined, 1);
|
| + var t = new TimelineThread(new TimelineProcess(7), 1);
|
| t.updateBounds();
|
| assertEquals(undefined, t.minTimestamp);
|
| assertEquals(undefined, t.maxTimestamp);
|
| }
|
|
|
| function testThreadBounds_SubRow() {
|
| - var t = new TimelineThread(undefined, 1);
|
| - t.subRows[0].push(new TimelineSlice('a', 0, 1, {}, 3));
|
| + var t = new TimelineThread(new TimelineProcess(7), 1);
|
| + t.subRows[0].push(new TimelineThreadSlice('a', 0, 1, {}, 3));
|
| t.updateBounds();
|
| assertEquals(1, t.minTimestamp);
|
| assertEquals(4, t.maxTimestamp);
|
| }
|
|
|
| -function testThreadBounds_NestedSubrow() {
|
| - var t = new TimelineThread(undefined, 1);
|
| - t.nonNestedSubRows.push([]);
|
| - t.nonNestedSubRows[0].push(new TimelineSlice('a', 0, 1, {}, 3));
|
| +function testThreadBounds_AsyncSliceGroup() {
|
| + var t = new TimelineThread(new TimelineProcess(7), 1);
|
| + t.subRows[0].push(new TimelineThreadSlice('a', 0, 1, {}, 3));
|
| + t.asyncSlices.push(newAsyncSlice(0.1, 5, t, t));
|
| t.updateBounds();
|
| - assertEquals(1, t.minTimestamp);
|
| - assertEquals(4, t.maxTimestamp);
|
| -}
|
| -
|
| -function testThreadBounds_SubRowAndNonNestedSubRow() {
|
| - var t = new TimelineThread(undefined, 1);
|
| - t.subRows[0].push(new TimelineSlice('a', 0, 0.5, {}, 3));
|
| - t.nonNestedSubRows.push([]);
|
| - t.nonNestedSubRows[0].push(new TimelineSlice('b', 0, 1, {}, 4.5));
|
| - t.updateBounds();
|
| - assertEquals(0.5, t.minTimestamp);
|
| - assertEquals(5.5, t.maxTimestamp);
|
| + assertEquals(0.1, t.minTimestamp);
|
| + assertEquals(5.1, t.maxTimestamp);
|
| }
|
|
|
| function testModelBounds_EmptyModel() {
|
| @@ -73,10 +76,10 @@ function testModelBounds_OneEmptyThread() {
|
| assertEquals(undefined, m.maxTimestamp);
|
| }
|
|
|
| -function testModelBounds_OneThrad() {
|
| +function testModelBounds_OneThread() {
|
| var m = new TimelineModel();
|
| var t = m.getOrCreateProcess(1).getOrCreateThread(1);
|
| - t.subRows[0].push(new TimelineSlice('a', 0, 1, {}, 3));
|
| + t.subRows[0].push(new TimelineThreadSlice('a', 0, 1, {}, 3));
|
| m.updateBounds();
|
| assertEquals(1, m.minTimestamp);
|
| assertEquals(4, m.maxTimestamp);
|
| @@ -85,7 +88,7 @@ function testModelBounds_OneThrad() {
|
| function testModelBounds_OneThreadAndOneEmptyThread() {
|
| var m = new TimelineModel();
|
| var t1 = m.getOrCreateProcess(1).getOrCreateThread(1);
|
| - t1.subRows[0].push(new TimelineSlice('a', 0, 1, {}, 3));
|
| + t1.subRows[0].push(new TimelineThreadSlice('a', 0, 1, {}, 3));
|
| var t2 = m.getOrCreateProcess(1).getOrCreateThread(1);
|
| m.updateBounds();
|
| assertEquals(1, m.minTimestamp);
|
| @@ -99,7 +102,6 @@ function testCpuBounds_Empty() {
|
| assertEquals(undefined, cpu.maxTimestamp);
|
| }
|
|
|
| -
|
| function testCpuBounds_OneSlice() {
|
| var cpu = new TimelineCpu(undefined, 1);
|
| cpu.slices.push(new TimelineSlice('a', 0, 1, {}, 3));
|
| @@ -109,10 +111,114 @@ function testCpuBounds_OneSlice() {
|
| }
|
|
|
| function testModelBounds_OneCpu() {
|
| + var m = new TimelineModel();
|
| + var cpu = m.getOrCreateCpu(1);
|
| + cpu.slices.push(new TimelineSlice('a', 0, 1, {}, 3));
|
| + m.updateBounds();
|
| + assertEquals(1, m.minTimestamp);
|
| + assertEquals(4, m.maxTimestamp);
|
| }
|
|
|
|
|
| function testModelBounds_OneCpuOneThread() {
|
| + var m = new TimelineModel();
|
| + var cpu = m.getOrCreateCpu(1);
|
| + cpu.slices.push(new TimelineSlice('a', 0, 1, {}, 3));
|
| +
|
| + var t = m.getOrCreateProcess(1).getOrCreateThread(1);
|
| + t.subRows[0].push(new TimelineThreadSlice('a', 0, 1, {}, 4));
|
| +
|
| + m.updateBounds();
|
| + assertEquals(1, m.minTimestamp);
|
| + assertEquals(5, m.maxTimestamp);
|
| +}
|
| +
|
| +function testPTIDFromPidAndTid() {
|
| + assertEquals('1:2', TimelineThread.getPTIDFromPidAndTid(1,2));
|
| +}
|
| +
|
| +function testAsyncSliceGroupBounds_Empty() {
|
| + var g = new TimelineAsyncSliceGroup(name);
|
| + g.updateBounds();
|
| + assertEquals(undefined, g.minTimestamp);
|
| + assertEquals(undefined, g.maxTimestamp);
|
| +}
|
| +
|
| +function testAsyncSliceGroupBounds_Basic() {
|
| + var p1 = new TimelineProcess(1);
|
| + var t1 = new TimelineThread(p1, 1);
|
| + var g = new TimelineAsyncSliceGroup("a");
|
| + g.push(newAsyncSlice(0, 1, t1, t1));
|
| + g.push(newAsyncSlice(1, 1.5, t1, t1));
|
| + assertEquals(2, g.length);
|
| + g.updateBounds();
|
| + assertEquals(0, g.minTimestamp);
|
| + assertEquals(2.5, g.maxTimestamp);
|
| +}
|
| +
|
| +function testAsyncSliceGroup_rebuildSubRows_twoNonOverlappingSlices() {
|
| + var p1 = new TimelineProcess(1);
|
| + var t1 = new TimelineThread(p1, 1);
|
| + var g = new TimelineAsyncSliceGroup("a");
|
| + g.slices.push(newAsyncSlice(0, 1, t1, t1));
|
| + g.slices.push(newAsyncSlice(1, 1, t1, t1));
|
| +
|
| + assertEquals(1, g.subRows.length);
|
| + assertEquals(2, g.subRows[0].length);
|
| + assertEquals(g.slices[0], g.subRows[0][0]);
|
| + assertEquals(g.slices[1], g.subRows[0][1]);
|
| +}
|
| +
|
| +function testAsyncSliceGroup_rebuildSubRows_twoOverlappingSlices() {
|
| + var p1 = new TimelineProcess(1);
|
| + var t1 = new TimelineThread(p1, 1);
|
| + var g = new TimelineAsyncSliceGroup("a");
|
| + g.slices.push(newAsyncSlice(0, 1, t1, t1));
|
| + g.slices.push(newAsyncSlice(0, 1.5, t1, t1));
|
| + g.updateBounds();
|
| +
|
| + assertEquals(2, g.subRows.length);
|
| + assertEquals(1, g.subRows[0].length);
|
| + assertEquals(g.slices[0], g.subRows[0][0]);
|
| + assertEquals(1, g.subRows[1].length);
|
| + assertEquals(g.slices[1], g.subRows[1][0]);
|
| +}
|
| +
|
| +function testAsyncSliceGroup_rebuildSubRows_threePartlyOverlappingSlices() {
|
| + var p1 = new TimelineProcess(1);
|
| + var t1 = new TimelineThread(p1, 1);
|
| + var g = new TimelineAsyncSliceGroup("a");
|
| + g.slices.push(newAsyncSlice(0, 1, t1, t1));
|
| + g.slices.push(newAsyncSlice(0, 1.5, t1, t1));
|
| + g.slices.push(newAsyncSlice(1, 1.5, t1, t1));
|
| + g.updateBounds();
|
| +
|
| + assertEquals(2, g.subRows.length);
|
| + assertEquals(2, g.subRows[0].length);
|
| + assertEquals(g.slices[0], g.subRows[0][0]);
|
| + assertEquals(g.slices[2], g.subRows[0][1]);
|
| + assertEquals(1, g.subRows[1].length);
|
| + assertEquals(g.slices[1], g.subRows[1][0]);
|
| +}
|
| +
|
| +function testAsyncSliceGroup_computeSubGroups_twoThreadSpecificSlices() {
|
| + var p1 = new TimelineProcess(1);
|
| + var t1 = new TimelineThread(p1, 1);
|
| + var t2 = new TimelineThread(p1, 2);
|
| + var g = new TimelineAsyncSliceGroup("a");
|
| + g.slices.push(newAsyncSlice(0, 1, t1, t1));
|
| + g.slices.push(newAsyncSlice(0, 1, t2, t2));
|
| +
|
| + var subGroups = g.computeSubGroups();
|
| + assertEquals(2, subGroups.length);
|
| +
|
| + assertEquals(g.name, subGroups[0].name)
|
| + assertEquals(1, subGroups[0].slices.length)
|
| + assertEquals(g.slices[0], subGroups[0].slices[0]);
|
| +
|
| + assertEquals(g.name, subGroups[1].name)
|
| + assertEquals(1, subGroups[1].slices.length)
|
| + assertEquals(g.slices[1], subGroups[1].slices[0]);
|
| }
|
|
|
| function testModelCanImportEmpty() {
|
|
|