xref: /aosp_15_r20/external/toolchain-utils/cros_utils/timeline.py (revision 760c253c1ed00ce9abd48f8546f08516e57485fe)
1*760c253cSXin Li# -*- coding: utf-8 -*-
2*760c253cSXin Li# Copyright 2019 The ChromiumOS Authors
3*760c253cSXin Li# Use of this source code is governed by a BSD-style license that can be
4*760c253cSXin Li# found in the LICENSE file.
5*760c253cSXin Li
6*760c253cSXin Li"""Tools for recording and reporting timeline of benchmark_run."""
7*760c253cSXin Li
8*760c253cSXin Li
9*760c253cSXin Li__author__ = "[email protected] (Yunlian Jiang)"
10*760c253cSXin Li
11*760c253cSXin Liimport time
12*760c253cSXin Li
13*760c253cSXin Li
14*760c253cSXin Liclass Event(object):
15*760c253cSXin Li    """One event on the timeline."""
16*760c253cSXin Li
17*760c253cSXin Li    def __init__(self, name="", cur_time=0):
18*760c253cSXin Li        self.name = name
19*760c253cSXin Li        self.timestamp = cur_time
20*760c253cSXin Li
21*760c253cSXin Li
22*760c253cSXin Liclass Timeline(object):
23*760c253cSXin Li    """Use a dict to store the timeline."""
24*760c253cSXin Li
25*760c253cSXin Li    def __init__(self):
26*760c253cSXin Li        self.events = []
27*760c253cSXin Li
28*760c253cSXin Li    def Record(self, event):
29*760c253cSXin Li        for e in self.events:
30*760c253cSXin Li            assert e.name != event, "The event {0} is already recorded.".format(
31*760c253cSXin Li                event
32*760c253cSXin Li            )
33*760c253cSXin Li        cur_event = Event(name=event, cur_time=time.time())
34*760c253cSXin Li        self.events.append(cur_event)
35*760c253cSXin Li
36*760c253cSXin Li    def GetEvents(self):
37*760c253cSXin Li        return [e.name for e in self.events]
38*760c253cSXin Li
39*760c253cSXin Li    def GetEventDict(self):
40*760c253cSXin Li        tl = {}
41*760c253cSXin Li        for e in self.events:
42*760c253cSXin Li            tl[e.name] = e.timestamp
43*760c253cSXin Li        return tl
44*760c253cSXin Li
45*760c253cSXin Li    def GetEventTime(self, event):
46*760c253cSXin Li        for e in self.events:
47*760c253cSXin Li            if e.name == event:
48*760c253cSXin Li                return e.timestamp
49*760c253cSXin Li        raise IndexError("The event {0} is not recorded".format(event))
50*760c253cSXin Li
51*760c253cSXin Li    def GetLastEventTime(self):
52*760c253cSXin Li        return self.events[-1].timestamp
53*760c253cSXin Li
54*760c253cSXin Li    def GetLastEvent(self):
55*760c253cSXin Li        return self.events[-1].name
56