Path: blob/master/AndroidRunner/Plugins/perfume_js/Perfume_js.py
630 views
import os.path as op1import os2import time3import csv4import threading5import shutil6from AndroidRunner.Plugins.perfume_js.server import start_server, stop_server78from AndroidRunner.Plugins.Profiler import Profiler910class Perfume_js(Profiler):11def __init__(self, config, paths):12super(Perfume_js, self).__init__(config, paths)13self.output_dir = ''14self.logcat_output = ''15self.profile = False16self.metrics = config['metrics']17#self.httpd= ""1819def start_profiling(self, device, **kwargs):20self.profile = True21self.logcat_output = '{}logcat_{}_{}.txt'.format(self.output_dir, device.id, time.strftime('%Y.%m.%d_%H%M%S'))2223os.makedirs('perfume-output', exist_ok=True)2425time.sleep(1)2627def stop_profiling(self, device, **kwargs):28self.profile = False29# Prevent the browser from loading the previous Perfume-injected web page twice.30# When the app is opened after each repetition, the last web page is loaded. Cleaning the data will prevent this issue.31kwargs['browser'].stop(device, clear_data=True)323334def collect_results(self, device, path=None):35if(os.path.isdir("perfume-output")):#check if the folder is created, sometimes if the internet connection is done server.py won't create the folder36perfumeOutputFiles= os.listdir("perfume-output")3738for onefile in perfumeOutputFiles:39if any(metr in onefile for metr in self.metrics):40newFilesDestination= shutil.move("perfume-output/"+onefile,self.output_dir)41shutil.rmtree("perfume-output/")4243def set_output(self, output_dir):44self.output_dir = output_dir4546def dependencies(self):47return []4849def load(self, device):50if os.path.isdir("perfume-output"):51shutil.rmtree("perfume-output/")52daemon = threading.Thread(name='daemon_server', target=start_server)53daemon.setDaemon(True) # Set as a daemon so it will be killed once the main thread is dead.54daemon.start()55return5657def unload(self, device):58stop_server()59return6061def aggregate_subject(self):62return6364def aggregate_end(self, data_dir, output_file):65return6667def aggregate_final(self, data_dir):68return69707172