Path: blob/master/AndroidRunner/NativeExperiment.py
908 views
import os.path as op1import time23from . import Tests4from .Experiment import Experiment5from .util import ConfigError678class NativeExperiment(Experiment):9def __init__(self, config, progress, restart):10self.package = None11self.duration = Tests.is_integer(config.get('duration', 0)) / 100012self.autostart_subject = config.get('autostart_subject', True)13self.experiment_args = config.get('experiment_args', [0]) # Just a single argument, if none are specified14super(NativeExperiment, self).__init__(config, progress, restart)15self.pre_installed_apps = config.get('apps', [])16for apk in config.get('paths', []):17if not op.isfile(apk):18raise ConfigError('File %s not found' % apk)1920def cleanup(self, device):21super(NativeExperiment, self).cleanup(device)22if self.package in device.get_app_list() and self.package not in self.pre_installed_apps:23device.uninstall(self.package)2425def before_experiment(self, device, *args, **kwargs):26super(NativeExperiment, self).before_experiment(device)2728def before_run_subject(self, device, path, *args, **kwargs):29super(NativeExperiment, self).before_run_subject(device, path)30if path in self.pre_installed_apps:31self.package = path32else:33filename = op.basename(path)34self.logger.info('APK: %s' % filename)35if filename not in device.get_app_list():36device.install(path)37self.package = op.splitext(op.basename(path))[0]3839def get_run_count(self):40return self.repetitions * len(self.experiment_args)4142def before_run(self, device, path, run, *args, **kwargs):43super(NativeExperiment, self).before_run(device, path, run, *args, **kwargs)44if self.autostart_subject:45device.configure_settings_device(self.package, enable=True)46device.launch_package(self.package)47time.sleep(1)48self.after_launch(device, path, run)4950def start_profiling(self, device, path, run, *args, **kwargs):51self.profilers.start_profiling(device, app=self.package)5253def interaction(self, device, path, run, *args, **kwargs):54super(NativeExperiment, self).interaction(device, path, run, *args, **kwargs)55time.sleep(self.duration)5657def after_run(self, device, path, run, *args, **kwargs):58self.before_close(device, path, run)59device.force_stop(self.package)60if self.clear_cache == True:61device.clear_app_data(self.package)62device.configure_settings_device(self.package, enable=False)63time.sleep(3)64super(NativeExperiment, self).after_run(device, path, run)6566def after_last_run(self, device, path, *args, **kwargs):67super(NativeExperiment, self).after_last_run(device, path)68if self.package in device.get_app_list() and self.package not in self.pre_installed_apps:69device.uninstall(self.package)70self.package = None7172def after_experiment(self, device, *args, **kwargs):73super(NativeExperiment, self).after_experiment(device)747576