1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)# Copyright 2014 The Chromium Authors. All rights reserved.
2a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch# Use of this source code is governed by a BSD-style license that can be
3a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch# found in the LICENSE file.
4a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
5a3f7b4e666c476898878fa745f637129375cd889Ben Murdochimport unittest
6a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)from telemetry.timeline.slice import Slice
8a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
9a3f7b4e666c476898878fa745f637129375cd889Ben Murdochclass SliceTest(unittest.TestCase):
10a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  def testChildrenLogic(self):
11a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    # [      top          ]
12a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    #   [ a  ]    [  b  ]
13a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    #    [x]
14a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    top = Slice(None, 'cat', 'top', 0, duration=10, thread_timestamp=0,
15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                thread_duration=5)
16a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    a = Slice(None, 'cat', 'a', 1, duration=2, thread_timestamp=0.5,
17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)              thread_duration=1)
18a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    x = Slice(None, 'cat', 'x', 1.5, duration=0.25, thread_timestamp=0.75,
19a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)              thread_duration=0.125)
20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    b = Slice(None, 'cat', 'b', 5, duration=2, thread_timestamp=None,
21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)              thread_duration=None)
22a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    top.sub_slices.extend([a, b])
23a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    a.sub_slices.append(x)
24a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
25a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    all_children = list(top.IterEventsInThisContainerRecrusively())
26a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    self.assertEquals([a, x, b], all_children)
27a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
28a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    self.assertEquals(x.self_time, 0.25)
29a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    self.assertEquals(a.self_time, 1.75) # 2 - 0.25
30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    self.assertEquals(top.self_time, 6) # 10 - 2 - 2
31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    self.assertEquals(x.self_thread_time, 0.125)
33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    self.assertEquals(a.self_thread_time, 0.875) # 1 - 0.125
34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    self.assertEquals(top.self_thread_time, None) # b has no thread time
35