Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
S2-group
GitHub Repository: S2-group/android-runner
Path: blob/master/AndroidRunner/Plugins/perfume_js/Perfume_js.py
630 views
1
import os.path as op
2
import os
3
import time
4
import csv
5
import threading
6
import shutil
7
from AndroidRunner.Plugins.perfume_js.server import start_server, stop_server
8
9
from AndroidRunner.Plugins.Profiler import Profiler
10
11
class Perfume_js(Profiler):
12
def __init__(self, config, paths):
13
super(Perfume_js, self).__init__(config, paths)
14
self.output_dir = ''
15
self.logcat_output = ''
16
self.profile = False
17
self.metrics = config['metrics']
18
#self.httpd= ""
19
20
def start_profiling(self, device, **kwargs):
21
self.profile = True
22
self.logcat_output = '{}logcat_{}_{}.txt'.format(self.output_dir, device.id, time.strftime('%Y.%m.%d_%H%M%S'))
23
24
os.makedirs('perfume-output', exist_ok=True)
25
26
time.sleep(1)
27
28
def stop_profiling(self, device, **kwargs):
29
self.profile = False
30
# Prevent the browser from loading the previous Perfume-injected web page twice.
31
# When the app is opened after each repetition, the last web page is loaded. Cleaning the data will prevent this issue.
32
kwargs['browser'].stop(device, clear_data=True)
33
34
35
def collect_results(self, device, path=None):
36
if(os.path.isdir("perfume-output")):#check if the folder is created, sometimes if the internet connection is done server.py won't create the folder
37
perfumeOutputFiles= os.listdir("perfume-output")
38
39
for onefile in perfumeOutputFiles:
40
if any(metr in onefile for metr in self.metrics):
41
newFilesDestination= shutil.move("perfume-output/"+onefile,self.output_dir)
42
shutil.rmtree("perfume-output/")
43
44
def set_output(self, output_dir):
45
self.output_dir = output_dir
46
47
def dependencies(self):
48
return []
49
50
def load(self, device):
51
if os.path.isdir("perfume-output"):
52
shutil.rmtree("perfume-output/")
53
daemon = threading.Thread(name='daemon_server', target=start_server)
54
daemon.setDaemon(True) # Set as a daemon so it will be killed once the main thread is dead.
55
daemon.start()
56
return
57
58
def unload(self, device):
59
stop_server()
60
return
61
62
def aggregate_subject(self):
63
return
64
65
def aggregate_end(self, data_dir, output_file):
66
return
67
68
def aggregate_final(self, data_dir):
69
return
70
71
72