Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(107)

Side by Side Diff: sky/tools/shelldb

Issue 1027903002: Enable tracing in SkyShell (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « sky/shell/tracing_controller.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2015 The Chromium Authors. All rights reserved. 2 # Copyright 2015 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 from skypy.skyserver import SkyServer 6 from skypy.skyserver import SkyServer
7 import argparse 7 import argparse
8 import json 8 import json
9 import logging 9 import logging
10 import os 10 import os
11 import re
11 import subprocess 12 import subprocess
12 import sys 13 import sys
14 import time
13 import urlparse 15 import urlparse
14 16
15 SKY_TOOLS_DIR = os.path.dirname(os.path.abspath(__file__)) 17 SKY_TOOLS_DIR = os.path.dirname(os.path.abspath(__file__))
16 SKY_ROOT = os.path.dirname(SKY_TOOLS_DIR) 18 SKY_ROOT = os.path.dirname(SKY_TOOLS_DIR)
17 SRC_ROOT = os.path.dirname(SKY_ROOT) 19 SRC_ROOT = os.path.dirname(SKY_ROOT)
18 20
19 SKY_SERVER_PORT = 9888 21 SKY_SERVER_PORT = 9888
20 DEFAULT_URL = "sky://domokit.github.io/home" 22 DEFAULT_URL = "sky://domokit.github.io/home"
21 APK_NAME = 'SkyDemo.apk' 23 APK_NAME = 'SkyDemo.apk'
22 ADB_PATH = os.path.join(SRC_ROOT, 24 ADB_PATH = os.path.join(SRC_ROOT,
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 mojo_core_path = os.path.join(SRC_ROOT, 'mojo/public/dart/core.dart') 223 mojo_core_path = os.path.join(SRC_ROOT, 'mojo/public/dart/core.dart')
222 analyzer_args = [ANALYZER_PATH, 224 analyzer_args = [ANALYZER_PATH,
223 "--url-mapping=dart:sky,%s" % dart_sky_path, 225 "--url-mapping=dart:sky,%s" % dart_sky_path,
224 "--url-mapping=dart:sky_builtin,%s" % sky_builtin_path, 226 "--url-mapping=dart:sky_builtin,%s" % sky_builtin_path,
225 "--url-mapping=dart:mojo.bindings,%s" % mojo_bindings_path, 227 "--url-mapping=dart:mojo.bindings,%s" % mojo_bindings_path,
226 "--url-mapping=dart:mojo.core,%s" % mojo_core_path, 228 "--url-mapping=dart:mojo.core,%s" % mojo_core_path,
227 args.app_path 229 args.app_path
228 ] 230 ]
229 subprocess.call(analyzer_args) 231 subprocess.call(analyzer_args)
230 232
233 class StartTracing(object):
234 def add_subparser(self, subparsers):
235 start_tracing_parser = subparsers.add_parser('start_tracing',
236 help=('start tracing a running sky instance'))
237 start_tracing_parser.set_defaults(func=self.run)
238
239 def run(self, args, pids):
240 subprocess.check_output([ADB_PATH, 'shell',
241 'am', 'broadcast',
242 '-a', 'org.domokit.sky.demo.TRACING_START'])
243
244
245 TRACE_COMPLETE_REGEXP = re.compile('Trace complete')
246 TRACE_FILE_REGEXP = re.compile(r'Saving trace to (?P<path>\S+)')
247
248 class StopTracing(object):
249 def add_subparser(self, subparsers):
250 stop_tracing_parser = subparsers.add_parser('stop_tracing',
251 help=('stop tracing a running sky instance'))
252 stop_tracing_parser.set_defaults(func=self.run)
253
254 def run(self, args, pids):
255 subprocess.check_output([ADB_PATH, 'logcat', '-c'])
256 subprocess.check_output([ADB_PATH, 'shell',
257 'am', 'broadcast',
258 '-a', 'org.domokit.sky.demo.TRACING_STOP'])
259 device_path = None
260 is_complete = False
261 while not is_complete:
262 time.sleep(0.2)
263 log = subprocess.check_output([ADB_PATH, 'logcat', '-d'])
264 if device_path is None:
265 result = TRACE_FILE_REGEXP.search(log)
266 if result:
267 device_path = result.group('path')
268 is_complete = TRACE_COMPLETE_REGEXP.search(log) is not None
269
270 print 'Downloading trace %s ...' % os.path.basename(device_path)
271
272 if device_path:
273 subprocess.check_output([ADB_PATH, 'pull', device_path])
274 subprocess.check_output([ADB_PATH, 'shell', 'rm', device_path])
275
231 276
232 class SkyShellRunner(object): 277 class SkyShellRunner(object):
233 def main(self): 278 def main(self):
234 logging.basicConfig(level=logging.WARNING) 279 logging.basicConfig(level=logging.WARNING)
235 280
236 parser = argparse.ArgumentParser(description='Sky Shell Runner') 281 parser = argparse.ArgumentParser(description='Sky Shell Runner')
237 subparsers = parser.add_subparsers(help='sub-command help') 282 subparsers = parser.add_subparsers(help='sub-command help')
238 283
239 for command in [StartSky(), StopSky(), Analyze()]: 284 commands = [
285 StartSky(),
286 StopSky(),
287 Analyze(),
288 StartTracing(),
289 StopTracing(),
290 ]
291
292 for command in commands:
240 command.add_subparser(subparsers) 293 command.add_subparser(subparsers)
241 294
242 args = parser.parse_args() 295 args = parser.parse_args()
243 pids = Pids.read_from(PID_FILE_PATH, PID_FILE_KEYS) 296 pids = Pids.read_from(PID_FILE_PATH, PID_FILE_KEYS)
244 exit_code = args.func(args, pids) 297 exit_code = args.func(args, pids)
245 # We could do this with an at-exit handler instead? 298 # We could do this with an at-exit handler instead?
246 pids.write_to(PID_FILE_PATH) 299 pids.write_to(PID_FILE_PATH)
247 sys.exit(exit_code) 300 sys.exit(exit_code)
248 301
249 302
250 if __name__ == '__main__': 303 if __name__ == '__main__':
251 SkyShellRunner().main() 304 SkyShellRunner().main()
OLDNEW
« no previous file with comments | « sky/shell/tracing_controller.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698