soiz1 commited on
Commit
142f981
·
verified ·
1 Parent(s): 7e73fec

Create timer.py

Browse files
stable-diffusion-webui-forge/modules/timer.py ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import time
2
+ import argparse
3
+
4
+
5
+ class TimerSubcategory:
6
+ def __init__(self, timer, category):
7
+ self.timer = timer
8
+ self.category = category
9
+ self.start = None
10
+ self.original_base_category = timer.base_category
11
+
12
+ def __enter__(self):
13
+ self.start = time.time()
14
+ self.timer.base_category = self.original_base_category + self.category + "/"
15
+ self.timer.subcategory_level += 1
16
+
17
+ if self.timer.print_log:
18
+ print(f"{' ' * self.timer.subcategory_level}{self.category}:")
19
+
20
+ def __exit__(self, exc_type, exc_val, exc_tb):
21
+ elapsed_for_subcategroy = time.time() - self.start
22
+ self.timer.base_category = self.original_base_category
23
+ self.timer.add_time_to_record(self.original_base_category + self.category, elapsed_for_subcategroy)
24
+ self.timer.subcategory_level -= 1
25
+ self.timer.record(self.category, disable_log=True)
26
+
27
+
28
+ class Timer:
29
+ def __init__(self, print_log=False):
30
+ self.start = time.time()
31
+ self.records = {}
32
+ self.total = 0
33
+ self.base_category = ''
34
+ self.print_log = print_log
35
+ self.subcategory_level = 0
36
+
37
+ def elapsed(self):
38
+ end = time.time()
39
+ res = end - self.start
40
+ self.start = end
41
+ return res
42
+
43
+ def add_time_to_record(self, category, amount):
44
+ if category not in self.records:
45
+ self.records[category] = 0
46
+
47
+ self.records[category] += amount
48
+
49
+ def record(self, category, extra_time=0, disable_log=False):
50
+ e = self.elapsed()
51
+
52
+ self.add_time_to_record(self.base_category + category, e + extra_time)
53
+
54
+ self.total += e + extra_time
55
+
56
+ if self.print_log and not disable_log:
57
+ print(f"{' ' * self.subcategory_level}{category}: done in {e + extra_time:.3f}s")
58
+
59
+ def subcategory(self, name):
60
+ self.elapsed()
61
+
62
+ subcat = TimerSubcategory(self, name)
63
+ return subcat
64
+
65
+ def summary(self):
66
+ res = f"{self.total:.1f}s"
67
+
68
+ additions = [(category, time_taken) for category, time_taken in self.records.items() if time_taken >= 0.1 and '/' not in category]
69
+ if not additions:
70
+ return res
71
+
72
+ res += " ("
73
+ res += ", ".join([f"{category}: {time_taken:.1f}s" for category, time_taken in additions])
74
+ res += ")"
75
+
76
+ return res
77
+
78
+ def dump(self):
79
+ return {'total': self.total, 'records': self.records}
80
+
81
+ def reset(self):
82
+ self.__init__()
83
+
84
+
85
+ parser = argparse.ArgumentParser(add_help=False)
86
+ parser.add_argument("--log-startup", action='store_true', help="print a detailed log of what's happening at startup")
87
+ args = parser.parse_known_args()[0]
88
+
89
+ startup_timer = Timer(print_log=args.log_startup)
90
+
91
+ startup_record = None