<!DOCTYPE HTML> <html> <!-- Copyright (c) 2012 The Chromium Authors. All rights reserved. Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. --> <head> <title>TimelineModel tests</title> <style> .timeline-view { border: 1px solid black; margin: 10px; } .timeline-find-dialog { border: 1px solid black; margin: 10px; } </style> <script src="base.js"></script> <script> base.require('unittest'); base.require('test_utils'); base.require('timeline_model'); </script> </head> <body> <script> 'use strict'; var TimelineSlice = tracing.TimelineSlice; var TimelineThreadSlice = tracing.TimelineThreadSlice; var TimelineThread = tracing.TimelineThread; var TimelineModel = tracing.TimelineModel; var TimelineTitleFilter = tracing.TimelineTitleFilter; function createModelWithOneOfEverything() { var m = new TimelineModel(); var cpu = m.getOrCreateCpu(1); cpu.slices.push(test_utils.newSlice(1, 3)); var p = m.getOrCreateProcess(1); var t = p.getOrCreateThread(1); t.pushSlice(new TimelineThreadSlice('', 'a', 0, 1, {}, 4)); t.asyncSlices.push(test_utils.newAsyncSlice(0, 1, t, t)); var c = p.getOrCreateCounter('', 'ProcessCounter'); c.seriesNames.push('a', 'b'); c.seriesColors.push(0, 1); c.timestamps.push(0, 1, 2, 3); c.samples.push(5, 10, 6, 15, 5, 12, 7, 16); var c1 = cpu.getOrCreateCounter('', 'CpuCounter'); c1.seriesNames.push('a', 'b'); c1.seriesColors.push(0, 1); c1.timestamps.push(0, 1, 2, 3); c1.samples.push(5, 10, 6, 15, 5, 12, 7, 16); m.updateBounds(); return m; } function testModelBounds_EmptyModel() { var m = new TimelineModel(); m.updateBounds(); assertEquals(undefined, m.minTimestamp); assertEquals(undefined, m.maxTimestamp); } function testModelBounds_OneEmptyThread() { var m = new TimelineModel(); var t = m.getOrCreateProcess(1).getOrCreateThread(1); m.updateBounds(); assertEquals(undefined, m.minTimestamp); assertEquals(undefined, m.maxTimestamp); } function testModelBounds_OneThread() { var m = new TimelineModel(); var t = m.getOrCreateProcess(1).getOrCreateThread(1); t.pushSlice(new TimelineThreadSlice('', 'a', 0, 1, {}, 3)); m.updateBounds(); assertEquals(1, m.minTimestamp); assertEquals(4, m.maxTimestamp); } function testModelBounds_OneThreadAndOneEmptyThread() { var m = new TimelineModel(); var t1 = m.getOrCreateProcess(1).getOrCreateThread(1); t1.pushSlice(new TimelineThreadSlice('', 'a', 0, 1, {}, 3)); var t2 = m.getOrCreateProcess(1).getOrCreateThread(1); m.updateBounds(); assertEquals(1, m.minTimestamp); assertEquals(4, m.maxTimestamp); } function testModelBounds_OneCpu() { var m = new TimelineModel(); var cpu = m.getOrCreateCpu(1); cpu.slices.push(test_utils.newSlice(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(test_utils.newSlice(1, 3)); var t = m.getOrCreateProcess(1).getOrCreateThread(1); t.pushSlice(new TimelineThreadSlice('', 'a', 0, 1, {}, 4)); m.updateBounds(); assertEquals(1, m.minTimestamp); assertEquals(5, m.maxTimestamp); } function testModelCanImportEmpty() { var m; m = new TimelineModel([]); m = new TimelineModel(''); } function testTimelineTitleFilter() { var s0 = test_utils.newSlice(1, 3); assertFalse(new TimelineTitleFilter('').matchSlice(s0)); assertTrue(new TimelineTitleFilter('a').matchSlice(s0)); assertFalse(new TimelineTitleFilter('x').matchSlice(s0)); var s1 = test_utils.newSliceNamed('ba', 1, 3); assertTrue(new TimelineTitleFilter('a').matchSlice(s1)); assertTrue(new TimelineTitleFilter('ba').matchSlice(s1)); assertFalse(new TimelineTitleFilter('x').matchSlice(s1)); } function testTimelineModel_toJSON() { var m = createModelWithOneOfEverything(); assertNotNull(JSON.stringify(m)); } function testTimelineModel_findAllThreadsNamed() { var m = new TimelineModel(); var t = m.getOrCreateProcess(1).getOrCreateThread(1); t.name = 'CrBrowserMain'; m.updateBounds(); var f = m.findAllThreadsNamed('CrBrowserMain'); assertArrayEquals([t], f); f = m.findAllThreadsNamed('NoSuchThread'); assertEquals(0, f.length); } function testTimelineModel_updateCategories() { var m = new TimelineModel(); var t = m.getOrCreateProcess(1).getOrCreateThread(1); t.pushSlice(new TimelineThreadSlice('categoryA', 'a', 0, 1, {}, 3)); t.pushSlice(new TimelineThreadSlice('categoryA', 'a', 0, 1, {}, 3)); t.pushSlice(new TimelineThreadSlice('categoryB', 'a', 0, 1, {}, 3)); t.pushSlice(new TimelineThreadSlice('categoryA', 'a', 0, 1, {}, 3)); t.pushSlice(new TimelineThreadSlice('', 'a', 0, 1, {}, 3)); m.updateCategories_(); assertArrayEquals(['categoryA', 'categoryB'], m.categories); } </script> </body> </html>