File: timers.py

package info (click to toggle)
freeorion 0.5.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 194,940 kB
  • sloc: cpp: 186,508; python: 40,969; ansic: 1,164; xml: 719; makefile: 32; sh: 7
file content (67 lines) | stat: -rw-r--r-- 2,001 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
from time import time


class Timer:
    def __init__(self, timer_name):
        """
        Creates timer. Timer name is name that will be in logs.
        """
        self.timer_name = timer_name
        self.start_time = None
        self.end_time = None
        self.section_name = None
        self.timers = []

    def stop(self, section_name=""):
        """
        Stop timer if running. Specify section_name if want to override its name.
        """
        if self.start_time:
            self.end_time = time()
            section_name = section_name or self.section_name
            self.timers.append((section_name, (self.end_time - self.start_time) * 1000.0))
        self.start_time = None
        self.section_name = None

    def start(self, section_name):
        """
        Stop prev timer if present and starts new.
        """
        self.stop()
        self.section_name = section_name
        self.start_time = time()

    def _print_timer_table(self, time_table):
        """
        Print a header and a footer and fill it with the timing results from time_table.
        """
        # TODO: Convert to use table code from here /python/common/print_utils.py#L116

        if not time_table:
            print("NOT Time Table")
            return
        max_header = max(len(x[0]) for x in time_table)
        line_max_size = max_header + 14
        print()
        print("Timing for %s:" % self.timer_name)
        print("=" * line_max_size)

        for name, val in time_table:
            print("%-*s %8d msec" % (max_header, name, val))

        print("-" * line_max_size)
        print(("Total: %8d msec" % sum(x[1] for x in time_table)).rjust(line_max_size))

    def stop_print_and_clear(self):
        """
        Stop timer, output result and clear state.
        """
        self.stop()
        self._print_timer_table(self.timers)
        self._clear_data()

    def _clear_data(self):
        """
        Clear timer data.
        """
        self.timers = []