Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
S2-group
GitHub Repository: S2-group/android-runner
Path: blob/master/AndroidRunner/NativeExperiment.py
907 views
1
import os.path as op
2
import time
3
4
from . import Tests
5
from .Experiment import Experiment
6
from .util import ConfigError
7
8
9
class NativeExperiment(Experiment):
10
def __init__(self, config, progress, restart):
11
self.package = None
12
self.duration = Tests.is_integer(config.get('duration', 0)) / 1000
13
self.autostart_subject = config.get('autostart_subject', True)
14
self.experiment_args = config.get('experiment_args', [0]) # Just a single argument, if none are specified
15
super(NativeExperiment, self).__init__(config, progress, restart)
16
self.pre_installed_apps = config.get('apps', [])
17
for apk in config.get('paths', []):
18
if not op.isfile(apk):
19
raise ConfigError('File %s not found' % apk)
20
21
def cleanup(self, device):
22
super(NativeExperiment, self).cleanup(device)
23
if self.package in device.get_app_list() and self.package not in self.pre_installed_apps:
24
device.uninstall(self.package)
25
26
def before_experiment(self, device, *args, **kwargs):
27
super(NativeExperiment, self).before_experiment(device)
28
29
def before_run_subject(self, device, path, *args, **kwargs):
30
super(NativeExperiment, self).before_run_subject(device, path)
31
if path in self.pre_installed_apps:
32
self.package = path
33
else:
34
filename = op.basename(path)
35
self.logger.info('APK: %s' % filename)
36
if filename not in device.get_app_list():
37
device.install(path)
38
self.package = op.splitext(op.basename(path))[0]
39
40
def get_run_count(self):
41
return self.repetitions * len(self.experiment_args)
42
43
def before_run(self, device, path, run, *args, **kwargs):
44
super(NativeExperiment, self).before_run(device, path, run, *args, **kwargs)
45
if self.autostart_subject:
46
device.configure_settings_device(self.package, enable=True)
47
device.launch_package(self.package)
48
time.sleep(1)
49
self.after_launch(device, path, run)
50
51
def start_profiling(self, device, path, run, *args, **kwargs):
52
self.profilers.start_profiling(device, app=self.package)
53
54
def interaction(self, device, path, run, *args, **kwargs):
55
super(NativeExperiment, self).interaction(device, path, run, *args, **kwargs)
56
time.sleep(self.duration)
57
58
def after_run(self, device, path, run, *args, **kwargs):
59
self.before_close(device, path, run)
60
device.force_stop(self.package)
61
if self.clear_cache == True:
62
device.clear_app_data(self.package)
63
device.configure_settings_device(self.package, enable=False)
64
time.sleep(3)
65
super(NativeExperiment, self).after_run(device, path, run)
66
67
def after_last_run(self, device, path, *args, **kwargs):
68
super(NativeExperiment, self).after_last_run(device, path)
69
if self.package in device.get_app_list() and self.package not in self.pre_installed_apps:
70
device.uninstall(self.package)
71
self.package = None
72
73
def after_experiment(self, device, *args, **kwargs):
74
super(NativeExperiment, self).after_experiment(device)
75
76