| <!DOCTYPE html> |
| <!-- |
| Copyright 2017 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. |
| --> |
| |
| <link rel="import" href="/tracing/core/test_utils.html"> |
| <link rel="import" href="/tracing/metrics/system_health/event_finder_utils.html"> |
| <link rel="import" href="/tracing/model/helpers/chrome_model_helper.html"> |
| |
| <script> |
| 'use strict'; |
| |
| const EventFinderUtils = tr.metrics.sh.EventFinderUtils; |
| |
| tr.b.unittest.testSuite(function() { |
| test('getSortedMainThreadEventsByFrame', () => { |
| const model = tr.c.TestUtils.newModel(model => { |
| const rendererProcess = model.getOrCreateProcess(1); |
| const mainThread = rendererProcess.getOrCreateThread(2); |
| mainThread.name = 'CrRendererMain'; |
| mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ |
| cat: 'blink.user_timing', |
| title: 'navigationStart', |
| start: 200, |
| duration: 0.0, |
| args: {frame: '0x0'} |
| })); |
| mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ |
| cat: 'blink.user_timing', |
| title: 'navigationStart', |
| start: 300, |
| duration: 0.0, |
| args: {frame: '0x1'} |
| })); |
| mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ |
| cat: 'blink.user_timing', |
| title: 'navigationStart', |
| start: 400, |
| duration: 0.0, |
| args: {frame: '0x0'} |
| })); |
| mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ |
| cat: 'devtools.timeline', |
| title: 'navigationStart', |
| start: 500, |
| duration: 0.0, |
| args: {frame: '0x0'} |
| })); |
| mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ |
| cat: 'blink.user_timing', |
| title: 'firstPaint', |
| start: 600, |
| duration: 0.0, |
| args: {frame: '0x0'} |
| })); |
| }); |
| |
| |
| const chromeHelper = model.getOrCreateHelper( |
| tr.model.helpers.ChromeModelHelper); |
| const rendererHelper = chromeHelper.rendererHelpers[1]; |
| const frameToSlices = EventFinderUtils.getSortedMainThreadEventsByFrame( |
| rendererHelper, 'navigationStart', 'blink.user_timing'); |
| |
| assert.strictEqual(frameToSlices.size, 2); |
| assert.strictEqual(frameToSlices.get('0x0').length, 2); |
| assert.strictEqual(frameToSlices.get('0x0')[0].start, 200); |
| assert.strictEqual(frameToSlices.get('0x0')[1].start, 400); |
| assert.strictEqual(frameToSlices.get('0x1').length, 1); |
| assert.strictEqual(frameToSlices.get('0x1')[0].start, 300); |
| }); |
| |
| test('multipleCategoriesOnAnEvent', () => { |
| const model = tr.c.TestUtils.newModel(model => { |
| const rendererProcess = model.getOrCreateProcess(1); |
| const mainThread = rendererProcess.getOrCreateThread(2); |
| mainThread.name = 'CrRendererMain'; |
| mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ |
| cat: 'blink.user_timing,rail', |
| title: 'navigationStart', |
| start: 200, |
| duration: 0.0, |
| args: {frame: '0x0'} |
| })); |
| }); |
| |
| const chromeHelper = model.getOrCreateHelper( |
| tr.model.helpers.ChromeModelHelper); |
| const rendererHelper = chromeHelper.rendererHelpers[1]; |
| const frameToSlices = EventFinderUtils.getSortedMainThreadEventsByFrame( |
| rendererHelper, 'navigationStart', 'blink.user_timing'); |
| |
| assert.strictEqual(frameToSlices.get('0x0')[0].start, 200); |
| }); |
| |
| test('findLastEventStartingOnOrBeforeTimestamp', () => { |
| const sortedEvents = [50, 100, 150, 200].map(ts => |
| tr.c.TestUtils.newSliceEx({ |
| cat: 'blink.user_timing', |
| title: 'navigationStart', |
| start: ts, |
| duration: 40.0})); |
| |
| assert.strictEqual( |
| EventFinderUtils.findLastEventStartingOnOrBeforeTimestamp( |
| sortedEvents, 100).start, |
| 100); |
| assert.strictEqual( |
| EventFinderUtils.findLastEventStartingOnOrBeforeTimestamp( |
| sortedEvents, 99).start, |
| 50); |
| assert.isUndefined( |
| EventFinderUtils.findLastEventStartingOnOrBeforeTimestamp( |
| sortedEvents, 49)); |
| }); |
| |
| test('findNextEventStartingOnOrAfterTimestamp', () => { |
| const sortedEvents = [50, 100, 150, 200].map(ts => |
| tr.c.TestUtils.newSliceEx({ |
| cat: 'blink.user_timing', |
| title: 'navigationStart', |
| start: ts, |
| duration: 40.0})); |
| |
| assert.strictEqual( |
| EventFinderUtils.findNextEventStartingOnOrAfterTimestamp( |
| sortedEvents, 100).start, |
| 100); |
| assert.strictEqual( |
| EventFinderUtils.findNextEventStartingOnOrAfterTimestamp( |
| sortedEvents, 101).start, |
| 150); |
| assert.isUndefined( |
| EventFinderUtils.findNextEventStartingOnOrAfterTimestamp( |
| sortedEvents, 201)); |
| }); |
| }); |
| </script> |