blob: 996cba9b8908e261c26efb9dc3f5c90374da8041 [file] [log] [blame]
# Copyright 2014 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.
class TimelineEvent(object):
"""Represents a timeline event.
thread_start, thread_duration and thread_end are the start time, duration
and end time of this event as measured by the thread-specific CPU clock
(ticking when the thread is actually scheduled). Thread time is optional
on trace events and the corresponding attributes in TimelineEvent will be
set to None (not 0) if not present. Users of this class need to properly
handle this case.
"""
def __init__(self, category, name, start, duration, thread_start=None,
thread_duration=None, args=None):
self.category = category
self.name = name
self.start = start
self.duration = duration
self.thread_start = thread_start
self.thread_duration = thread_duration
self.args = args
@property
def end(self):
return self.start + self.duration
@property
def has_thread_timestamps(self):
return self.thread_start is not None and self.thread_duration is not None
@property
def thread_end(self):
"""Thread-specific CPU time when this event ended.
May be None if the trace event didn't have thread time data.
"""
if self.thread_start == None or self.thread_duration == None:
return None
return self.thread_start + self.thread_duration
def __repr__(self):
if self.args:
args_str = ', ' + repr(self.args)
else:
args_str = ''
return ("TimelineEvent(name='%s', start=%f, duration=%s, " +
"thread_start=%s, thread_duration=%s%s)") % (
self.name,
self.start,
self.duration,
self.thread_start,
self.thread_duration,
args_str)