summaryrefslogtreecommitdiff
path: root/aergia
diff options
context:
space:
mode:
Diffstat (limited to 'aergia')
-rwxr-xr-xaergia33
1 files changed, 14 insertions, 19 deletions
diff --git a/aergia b/aergia
index f94781c..685a13f 100755
--- a/aergia
+++ b/aergia
@@ -46,7 +46,6 @@ from types import FrameType
from typing import cast, List, Tuple
import argparse
import asyncio
-import atexit
import selectors
import signal
import sys
@@ -92,22 +91,23 @@ class Aergia(object):
# the timestamp recorded last signal
last_signal_time = 0.0
+ signal_interval = 0
+
def __init__(self, signal_interval):
- signal.signal(signal.SIGPROF,
- self.cpu_signal_handler)
- signal.setitimer(signal.ITIMER_PROF,
- signal_interval,
- signal_interval)
+ Aergia.signal_interval = signal_interval
@staticmethod
def start():
- atexit.register(Aergia.exit_handler)
+ signal.signal(signal.SIGPROF,
+ Aergia.cpu_signal_handler)
+ signal.setitimer(signal.ITIMER_PROF,
+ Aergia.signal_interval,
+ Aergia.signal_interval)
Aergia.last_signal_time = Aergia.gettime()
- @staticmethod
- def exit_handler():
- Aergia.print_samples()
+ def stop():
Aergia.disable_signals()
+ Aergia.print_samples()
@staticmethod
def print_samples():
@@ -123,7 +123,7 @@ class Aergia(object):
@staticmethod
def print_sample(key):
'''Pretty-print a single sample.'''
- sig_intv = Aergia.get_sampling_interval()
+ sig_intv = Aergia.signal_interval
value = Aergia.samples[key]
tot = Aergia.sum_sample(value)
print(f"{key} :\t{tot * 100 / Aergia.total_samples:.3f}%"
@@ -137,7 +137,7 @@ class Aergia(object):
@staticmethod
def cpu_signal_handler(sig, frame):
- sig_intv = Aergia.get_sampling_interval()
+ sig_intv = Aergia.signal_interval
elapsed_since_last_signal = Aergia.gettime() - \
Aergia.last_signal_time
c_time_norm = (elapsed_since_last_signal - sig_intv) / \
@@ -145,8 +145,7 @@ class Aergia(object):
keys = Aergia.compute_frames_to_record()
for key in keys:
- Aergia.samples[Aergia.frame_to_string(key)][0] += \
- elapsed_since_last_signal
+ Aergia.samples[Aergia.frame_to_string(key)][0] += 1
Aergia.samples[Aergia.frame_to_string(key)][1] += c_time_norm
Aergia.total_samples += elapsed_since_last_signal / \
sig_intv
@@ -243,11 +242,6 @@ class Aergia(object):
'''returns the wallclock time'''
return time.time()
- @staticmethod
- def get_sampling_interval():
- '''returns the current sampling interval'''
- return signal.getitimer(signal.ITIMER_PROF)[-1]
-
the_globals = {
'__name__': '__main__',
@@ -289,6 +283,7 @@ def main():
code = compile(fp.read(), args.script, "exec")
Aergia(args.interval).start()
exec(code, the_globals)
+ Aergia.stop()
except Exception:
traceback.print_exc()