Chromium Code Reviews| Index: tools/telemetry/telemetry/core/timeline/slice.py |
| diff --git a/tools/telemetry/telemetry/core/timeline/slice.py b/tools/telemetry/telemetry/core/timeline/slice.py |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..5ce2b28a84d9598994979b42073c8a154018065a |
| --- /dev/null |
| +++ b/tools/telemetry/telemetry/core/timeline/slice.py |
| @@ -0,0 +1,52 @@ |
| +# Copyright 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 telemetry.core.timeline.event as timeline_event |
| + |
| +class Slice(timeline_event.TimelineEvent): |
| + """A Slice represents an interval of time plus parameters associated |
| + with that interval. |
| + |
| + NOTE: The Sample class implements the same interface as |
| + Slice. These must be kept in sync. |
| + |
| + All time units are stored in milliseconds. |
| + """ |
| + def __init__(self, parent_thread, category, name, timestamp, |
| + args=None, duration=0): |
| + super(Slice, self).__init__( |
| + category, name, timestamp, duration, args=args) |
| + self.parent_thread = parent_thread |
| + self.parent_slice = None |
| + self.sub_slices = [] |
| + self.did_not_finish = False |
| + |
| + def AddSubSlice(self, sub_slice): |
| + assert sub_slice.parent_slice == self |
|
Tim Song
2013/07/18 22:56:36
We should just assign the parent_slice here instea
|
| + self.sub_slices.append(sub_slice) |
| + |
| + def IterEventsInThisContainerRecrusively(self): |
| + for sub_slice in self.sub_slices: |
| + yield sub_slice |
| + for sub_sub in sub_slice.IterEventsInThisContainerRecrusively(): |
| + yield sub_sub |
| + |
| + @property |
| + def self_time(self): |
| + """Time spent in this function less any time spent in child events.""" |
| + child_total = sum( |
| + [e.duration for e in self.sub_slices]) |
| + return self.duration - child_total |
| + |
| + def _GetSubSlicesRecursive(self): |
| + for sub_slice in self.sub_slices: |
| + for s in sub_slice.GetAllSubSlices(): |
| + yield s |
| + yield sub_slice |
| + |
| + def GetAllSubSlices(self): |
| + return list(self._GetSubSlicesRecursive()) |
| + |
| + def GetAllSubSlicesOfName(self, name): |
| + return [e for e in self.GetAllSubSlices() if e.name == name] |