Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
S2-group
GitHub Repository: S2-group/android-runner
Path: blob/master/AndroidRunner/Profilers.py
629 views
1
import logging
2
from itertools import chain
3
4
from .PluginHandler import PluginHandler
5
6
7
class Profilers(object):
8
9
def __init__(self, config):
10
self.logger = logging.getLogger(self.__class__.__name__)
11
self.profilers = []
12
self.loaded_devices = []
13
for name, params in list(config.items()):
14
try:
15
self.profilers.append(PluginHandler(name, params))
16
except ImportError:
17
self.logger.error('Cannot import %s' % name)
18
raise
19
20
def dependencies(self):
21
# https://stackoverflow.com/a/953097
22
return list(chain.from_iterable([p.dependencies() for p in self.profilers]))
23
24
def load(self, device):
25
self.logger.info('Loading')
26
if device.name not in self.loaded_devices:
27
for p in self.profilers:
28
p.load(device)
29
self.loaded_devices.append(device.name)
30
31
def start_profiling(self, device, **kwargs):
32
self.logger.info('Start profiling')
33
for p in self.profilers:
34
p.start_profiling(device, **kwargs)
35
36
def stop_profiling(self, device, **kwargs):
37
self.logger.info('Stop profiling')
38
for p in self.profilers:
39
p.stop_profiling(device, **kwargs)
40
41
def collect_results(self, device):
42
self.logger.info('Collecting results')
43
for p in self.profilers:
44
p.collect_results(device)
45
46
def unload(self, device):
47
self.logger.info('Unloading')
48
for p in self.profilers:
49
p.unload(device)
50
51
def set_output(self):
52
self.logger.info('Setting output')
53
for p in self.profilers:
54
p.set_output()
55
56
def aggregate_subject(self):
57
self.logger.info('Start subject aggregation')
58
for p in self.profilers:
59
p.aggregate_subject()
60
61
def aggregate_end(self, output_dir):
62
self.logger.info('Start final aggregation')
63
for p in self.profilers:
64
p.aggregate_data_end(output_dir)
65
66