From 21db24b10e5fd3f1833569ae5f957e114172e1d2 Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Mon, 5 Jun 2017 18:08:23 -0700 Subject: [PATCH] simpleperf: fix app_profiler.py. Previous change makes app_profiler.py not work on rooted devices because of using '>xxx' as a flag to store stdout files. Change this to a more obvious way. Bug: http://b/62028152 Test: run app_profiler.py on both rooted and non-rooted devices. Change-Id: Ice2399d007a64a7d0000560b2368a392620b1053 --- simpleperf/scripts/app_profiler.py | 10 +++++----- simpleperf/scripts/utils.py | 12 +++++------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/simpleperf/scripts/app_profiler.py b/simpleperf/scripts/app_profiler.py index ea181f16..25098d30 100644 --- a/simpleperf/scripts/app_profiler.py +++ b/simpleperf/scripts/app_profiler.py @@ -121,7 +121,7 @@ class AppProfiler(object): self.adb.set_property('security.perf_harden', '0') if self.is_root_device: # We can enable kernel symbols - self.adb.run(['shell', 'echo', '0', '>/proc/sys/kernel/kptr_restrict']) + self.adb.run(['shell', 'echo 0 >/proc/sys/kernel/kptr_restrict']) def _recompile_app(self): @@ -271,7 +271,7 @@ class AppProfiler(object): def collect_profiling_data(self): - self.run_in_app_dir(['cat', 'perf.data', '>' + self.config['perf_data_path']]) + self.run_in_app_dir(['cat', 'perf.data'], self.config['perf_data_path']) config = copy.copy(self.config) config['symfs_dirs'] = [] if self.config['native_lib_dir']: @@ -280,13 +280,13 @@ class AppProfiler(object): binary_cache_builder.build_binary_cache() - def run_in_app_dir(self, args): + def run_in_app_dir(self, args, stdout_file=None): if self.is_root_device: cmd = 'cd /data/data/' + self.config['app_package_name'] + ' && ' + (' '.join(args)) - return self.adb.check_run_and_return_output(['shell', cmd]) + return self.adb.check_run_and_return_output(['shell', cmd], stdout_file) else: return self.adb.check_run_and_return_output( - ['shell', 'run-as', self.config['app_package_name']] + args) + ['shell', 'run-as', self.config['app_package_name']] + args, stdout_file) if __name__ == '__main__': diff --git a/simpleperf/scripts/utils.py b/simpleperf/scripts/utils.py index 5474676d..a0b3b3ba 100644 --- a/simpleperf/scripts/utils.py +++ b/simpleperf/scripts/utils.py @@ -104,13 +104,12 @@ class AdbHelper(object): return self.run_and_return_output(adb_args)[0] - def run_and_return_output(self, adb_args): + def run_and_return_output(self, adb_args, stdout_file=None): adb_args = [self.adb_path] + adb_args log_debug('run adb cmd: %s' % adb_args) - if adb_args[-1][0] == '>': - stdout_file = adb_args[-1][1:] + if stdout_file: with open(stdout_file, 'wb') as stdout_fh: - returncode = subprocess.call(adb_args[:-1], stdout=stdout_fh) + returncode = subprocess.call(adb_args, stdout=stdout_fh) stdoutdata = '' else: subproc = subprocess.Popen(adb_args, stdout=subprocess.PIPE) @@ -123,13 +122,12 @@ class AdbHelper(object): log_debug('run adb cmd: %s [result %s]' % (adb_args, result)) return (result, stdoutdata) - def check_run(self, adb_args): self.check_run_and_return_output(adb_args) - def check_run_and_return_output(self, adb_args): - result, stdoutdata = self.run_and_return_output(adb_args) + def check_run_and_return_output(self, adb_args, stdout_file=None): + result, stdoutdata = self.run_and_return_output(adb_args, stdout_file) if not result: log_fatal('run "adb %s" failed' % adb_args) return stdoutdata -- 2.11.0