-
Notifications
You must be signed in to change notification settings - Fork 5.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Reland "Use the systrace recorder if systracing is enabled at startup, and enable systracing in release mode on Android (#28903)" (#29071)" This reverts commit a2773d5. * More logcat * more logs * Remove wait * Avoid plugin registrar exception * DEFAULT instead of LAUNCHER * use am instead of monkey * Update android_systrace_test.py
- Loading branch information
Showing
11 changed files
with
197 additions
and
21 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,113 @@ | ||
#!/usr/bin/env python3 | ||
# | ||
# Copyright 2013 The Flutter Authors. All rights reserved. | ||
# Use of this source code is governed by a BSD-style license that can be | ||
# found in the LICENSE file. | ||
|
||
import argparse | ||
import os | ||
import subprocess | ||
import sys | ||
|
||
BUILDROOT_DIR = os.path.abspath(os.path.join(os.path.realpath(__file__), '..', '..', '..')) | ||
|
||
PERFETTO_SESSION_KEY = 'session1' | ||
PERFETTO_TRACE_FILE = '/data/misc/perfetto-traces/trace' | ||
PERFETTO_CONFIG = ''' | ||
write_into_file: true | ||
file_write_period_ms: 1000000000 | ||
flush_period_ms: 1000 | ||
buffers: { | ||
size_kb: 129024 | ||
} | ||
data_sources: { | ||
config { | ||
name: "linux.ftrace" | ||
ftrace_config { | ||
ftrace_events: "ftrace/print" | ||
atrace_apps: "%s" | ||
} | ||
} | ||
} | ||
''' | ||
|
||
def InstallApk(apk_path, package_name, adb_path='adb'): | ||
print('Installing APK') | ||
subprocess.check_output([adb_path, 'shell', 'am', 'force-stop', package_name]) | ||
# Allowed to fail if APK was never installed. | ||
subprocess.call([adb_path, 'uninstall', package_name], stdout=subprocess.DEVNULL) | ||
subprocess.check_output([adb_path, 'install', apk_path]) | ||
|
||
|
||
def StartPerfetto(package_name, adb_path='adb'): | ||
print('Starting trace') | ||
cmd = [adb_path, 'shell', 'echo' , "'" + PERFETTO_CONFIG % package_name + "'", '|', | ||
'perfetto', '-c', '-', '--txt', '-o', PERFETTO_TRACE_FILE, | ||
'--detach', PERFETTO_SESSION_KEY] | ||
|
||
subprocess.check_output(cmd, stderr=subprocess.STDOUT) | ||
|
||
|
||
def LaunchPackage(package_name, activity_name, adb_path='adb'): | ||
print('Scanning logcat') | ||
subprocess.check_output([adb_path, 'logcat', '-c'], stderr=subprocess.STDOUT) | ||
logcat = subprocess.Popen([adb_path, 'logcat'], stdout=subprocess.PIPE, | ||
stderr=subprocess.STDOUT, universal_newlines=True) | ||
|
||
print('Launching %s (%s)' % (package_name, activity_name)) | ||
subprocess.check_output( | ||
[adb_path, 'shell', 'am ', 'start', '-n', | ||
'%s/%s' % (package_name, activity_name)], stderr=subprocess.STDOUT) | ||
for line in logcat.stdout: | ||
print('>>>>>>>> ' + line.strip()) | ||
if 'Observatory listening' in line: | ||
logcat.kill() | ||
break | ||
|
||
|
||
def CollectAndValidateTrace(adb_path = 'adb'): | ||
print('Fetching trace') | ||
subprocess.check_output([adb_path, 'shell', 'perfetto', '--attach', | ||
PERFETTO_SESSION_KEY, '--stop'], stderr=subprocess.STDOUT) | ||
subprocess.check_output([adb_path, 'pull', PERFETTO_TRACE_FILE, 'trace.pb'], stderr=subprocess.STDOUT) | ||
|
||
print('Validating trace') | ||
traceconv = os.path.join(BUILDROOT_DIR, 'third_party', | ||
'android_tools', 'trace_to_text', 'trace_to_text') | ||
traceconv_output = subprocess.check_output([traceconv, 'systrace', 'trace.pb'], stderr=subprocess.STDOUT, universal_newlines=True) | ||
|
||
print('Trace output:') | ||
print(traceconv_output) | ||
|
||
if 'ShellSetupUISubsystem' in traceconv_output: | ||
return 0 | ||
|
||
print('Trace did not contain ShellSetupUISubsystem, failing.') | ||
return 1 | ||
|
||
|
||
def main(): | ||
parser = argparse.ArgumentParser() | ||
|
||
parser.add_argument('--apk-path', dest='apk_path', action='store', | ||
help='Provide the path to the APK to install') | ||
parser.add_argument('--package-name', dest='package_name', action='store', | ||
help='The package name of the APK, e.g. dev.flutter.scenarios') | ||
parser.add_argument('--activity-name', dest='activity_name', action='store', | ||
help='The activity to launch as it appears in AndroidManifest.xml, ' | ||
'e.g. .TextPlatformViewActivity') | ||
parser.add_argument('--adb-path', dest='adb_path', action='store', | ||
default='adb', help='Provide the path of adb used for android tests. ' | ||
'By default it looks on $PATH.') | ||
|
||
args = parser.parse_args() | ||
|
||
InstallApk(args.apk_path, args.package_name, args.adb_path) | ||
StartPerfetto(args.package_name, args.adb_path) | ||
LaunchPackage(args.package_name, args.activity_name, args.adb_path) | ||
return CollectAndValidateTrace(args.adb_path) | ||
|
||
|
||
if __name__ == '__main__': | ||
sys.exit(main()) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters