blob: afb99e6344c90f2451fda8f6ccae93aa952e4c61 [file] [log] [blame]
# Copyright (c) 2013 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.
import unittest
from telemetry.core.timeline import inspector_importer
from telemetry.core.timeline import model
_SAMPLE_MESSAGE = {
'children': [
{'data': {},
'startTime': 1352783525921.823,
'type': 'BeginFrame',
'usedHeapSize': 1870736},
{'children': [],
'data': {'height': 723,
'width': 1272,
'x': 0,
'y': 0},
'endTime': 1352783525921.8992,
'frameId': '10.2',
'startTime': 1352783525921.8281,
'type': 'Layout',
'usedHeapSize': 1870736},
{'children': [
{'children': [],
'data': {'imageType': 'PNG'},
'endTime': 1352783525927.7939,
'startTime': 1352783525922.4241,
'type': 'DecodeImage',
'usedHeapSize': 1870736}
],
'data': {'height': 432,
'width': 1272,
'x': 0,
'y': 8},
'endTime': 1352783525927.9822,
'frameId': '10.2',
'startTime': 1352783525921.9292,
'type': 'Paint',
'usedHeapSize': 1870736}
],
'data': {},
'endTime': 1352783525928.041,
'startTime': 1352783525921.8049,
'type': 'Program'}
class InspectorEventParsingTest(unittest.TestCase):
def testParsingWithSampleData(self):
root_event = (inspector_importer.InspectorTimelineImporter
.RawEventToTimelineEvent(_SAMPLE_MESSAGE))
self.assertTrue(root_event)
decode_image_event = [
child for child in root_event.IterEventsInThisContainerRecrusively()
if child.name == 'DecodeImage'][0]
self.assertEquals(decode_image_event.args['data']['imageType'], 'PNG')
self.assertTrue(decode_image_event.duration > 0)
def testParsingWithSimpleData(self):
raw_event = {'type': 'Foo',
'startTime': 1,
'endTime': 3,
'children': []}
event = (inspector_importer.InspectorTimelineImporter
.RawEventToTimelineEvent(raw_event))
self.assertEquals('Foo', event.name)
self.assertEquals(1, event.start)
self.assertEquals(3, event.end)
self.assertEquals(2, event.duration)
self.assertEquals([], event.sub_slices)
def testParsingWithArgs(self):
raw_event = {'type': 'Foo',
'startTime': 1,
'endTime': 3,
'foo': 7,
'bar': {'x': 1}}
event = (inspector_importer.InspectorTimelineImporter
.RawEventToTimelineEvent(raw_event))
self.assertEquals('Foo', event.name)
self.assertEquals(1, event.start)
self.assertEquals(3, event.end)
self.assertEquals(2, event.duration)
self.assertEquals([], event.sub_slices)
self.assertEquals(7, event.args['foo'])
self.assertEquals(1, event.args['bar']['x'])
def testEventsWithNoStartTimeAreDropped(self):
raw_event = {'type': 'Foo',
'endTime': 1,
'children': []}
event = (inspector_importer.InspectorTimelineImporter.
RawEventToTimelineEvent(raw_event))
self.assertEquals(None, event)
def testEventsWithNoEndTimeAreDropped(self):
raw_event = {'type': 'Foo',
'endTime': 1,
'children': []}
event = (inspector_importer.InspectorTimelineImporter.
RawEventToTimelineEvent(raw_event))
self.assertEquals(None, event)
class InspectorImporterTest(unittest.TestCase):
def testImport(self):
m = model.TimelineModel([_SAMPLE_MESSAGE], shift_world_to_zero=False)
self.assertEquals(1, len(m.processes))
self.assertEquals(1, len(m.processes.values()[0].threads))
renderer_thread = m.GetAllThreads()[0]
self.assertEquals(1, len(renderer_thread.toplevel_slices))
self.assertEquals('Program',
renderer_thread.toplevel_slices[0].name)