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

Side by Side Diff: sky/tools/shelldb

Issue 1064983003: Fix sky_tool's calling of adb, and shelldb's analyze and stop (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 8 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/sdk/packages/sky/lib/sky_tool ('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 re
12 import signal
12 import subprocess 13 import subprocess
13 import sys 14 import sys
14 import time 15 import time
15 import urlparse 16 import urlparse
16 17
17 SKY_TOOLS_DIR = os.path.dirname(os.path.abspath(__file__)) 18 SKY_TOOLS_DIR = os.path.dirname(os.path.abspath(__file__))
18 SKY_ROOT = os.path.dirname(SKY_TOOLS_DIR) 19 SKY_ROOT = os.path.dirname(SKY_TOOLS_DIR)
19 SRC_ROOT = os.path.dirname(SKY_ROOT) 20 SRC_ROOT = os.path.dirname(SKY_ROOT)
20 21
21 SKY_SERVER_PORT = 9888 22 SKY_SERVER_PORT = 9888
22 DEFAULT_URL = "sky://domokit.github.io/home" 23 DEFAULT_URL = "sky://domokit.github.io/home"
23 APK_NAME = 'SkyDemo.apk' 24 APK_NAME = 'SkyDemo.apk'
24 ADB_PATH = os.path.join(SRC_ROOT, 25 ADB_PATH = os.path.join(SRC_ROOT,
25 'third_party/android_tools/sdk/platform-tools/adb') 26 'third_party/android_tools/sdk/platform-tools/adb')
26 27 ANDROID_PACKAGE = "org.domokit.sky.demo"
27 28
28 PID_FILE_PATH = "/tmp/skydemo.pids" 29 PID_FILE_PATH = "/tmp/skydemo.pids"
29 PID_FILE_KEYS = frozenset([ 30 PID_FILE_KEYS = frozenset([
30 'remote_sky_server_port', 31 'remote_sky_server_port',
31 'sky_server_pid', 32 'sky_server_pid',
32 'sky_server_port', 33 'sky_server_port',
33 'sky_server_root', 34 'sky_server_root',
34 'build_dir', 35 'build_dir',
35 ]) 36 ])
36 37
(...skipping 25 matching lines...) Expand all
62 def __iter__(self): 63 def __iter__(self):
63 return iter(self._dict) 64 return iter(self._dict)
64 65
65 def __contains__(self, key): 66 def __contains__(self, key):
66 assert key in self._known_keys, '%s not in allowed_keys' % key 67 assert key in self._known_keys, '%s not in allowed_keys' % key
67 return key in self._dict 68 return key in self._dict
68 69
69 def clear(self): 70 def clear(self):
70 self._dict = {} 71 self._dict = {}
71 72
73 def pop(self, key, default=None):
74 assert key in self._known_keys, '%s not in allowed_keys' % key
75 return self._dict.pop(key, default)
76
72 @classmethod 77 @classmethod
73 def read_from(cls, path, known_keys): 78 def read_from(cls, path, known_keys):
74 contents = {} 79 contents = {}
75 try: 80 try:
76 with open(path, 'r') as pid_file: 81 with open(path, 'r') as pid_file:
77 contents = json.load(pid_file) 82 contents = json.load(pid_file)
78 except: 83 except:
79 if os.path.exists(path): 84 if os.path.exists(path):
80 logging.warn('Failed to read pid file: %s' % path) 85 logging.warn('Failed to read pid file: %s' % path)
81 return cls(known_keys, contents) 86 return cls(known_keys, contents)
(...skipping 17 matching lines...) Expand all
99 if urlparse.urlparse(args.url_or_path).scheme: 104 if urlparse.urlparse(args.url_or_path).scheme:
100 return args.url_or_path 105 return args.url_or_path
101 # The load happens on the remote device, use the remote port. 106 # The load happens on the remote device, use the remote port.
102 remote_sky_server_port = pids.get('remote_sky_server_port', 107 remote_sky_server_port = pids.get('remote_sky_server_port',
103 pids['sky_server_port']) 108 pids['sky_server_port'])
104 url = SkyServer.url_for_path(remote_sky_server_port, 109 url = SkyServer.url_for_path(remote_sky_server_port,
105 pids['sky_server_root'], args.url_or_path) 110 pids['sky_server_root'], args.url_or_path)
106 return _convert_to_sky_url(url) 111 return _convert_to_sky_url(url)
107 112
108 113
114 def dev_sdk_root(build_dir):
115 return os.path.join(build_dir, 'gen', 'sky_sdk')
116
117 def dev_packages_root(build_dir):
118 return os.path.join(dev_sdk_root(build_dir), 'packages_root')
119
120
109 class StartSky(object): 121 class StartSky(object):
110 def add_subparser(self, subparsers): 122 def add_subparser(self, subparsers):
111 start_parser = subparsers.add_parser('start', 123 start_parser = subparsers.add_parser('start',
112 help='launch SKyShell.apk on the device') 124 help='launch SKyShell.apk on the device')
113 start_parser.add_argument('build_dir', type=str) 125 start_parser.add_argument('build_dir', type=str)
114 start_parser.add_argument('url_or_path', nargs='?', type=str, 126 start_parser.add_argument('url_or_path', nargs='?', type=str,
115 default=DEFAULT_URL) 127 default=DEFAULT_URL)
116 start_parser.add_argument('--no_install', action="store_false", 128 start_parser.add_argument('--no_install', action="store_false",
117 default=True, dest="install", 129 default=True, dest="install",
118 help="Don't install SkyDemo.apk before starting") 130 help="Don't install SkyDemo.apk before starting")
(...skipping 17 matching lines...) Expand all
136 server_root = self._server_root_for_url(args.url_or_path) 148 server_root = self._server_root_for_url(args.url_or_path)
137 sky_server = SkyServer(SKY_SERVER_PORT, configuration, server_root, pack ages_root) 149 sky_server = SkyServer(SKY_SERVER_PORT, configuration, server_root, pack ages_root)
138 return sky_server 150 return sky_server
139 151
140 def run(self, args, pids): 152 def run(self, args, pids):
141 apk_path = os.path.join(args.build_dir, 'apks', APK_NAME) 153 apk_path = os.path.join(args.build_dir, 'apks', APK_NAME)
142 if not os.path.exists(apk_path): 154 if not os.path.exists(apk_path):
143 print "'%s' does not exist?" % apk_path 155 print "'%s' does not exist?" % apk_path
144 return 2 156 return 2
145 157
146 sdk_root = os.path.join(args.build_dir, 'gen', 'sky_sdk') 158 sdk_root = dev_sdk_root(args.build_dir)
147 packages_root = os.path.join(sdk_root, 'packages_root') 159 packages_root = dev_packages_root(args.build_dir)
148 sky_tools_directory = os.path.join(SRC_ROOT, 'sky/tools') 160 sky_tools_directory = os.path.join(SRC_ROOT, 'sky/tools')
149 subprocess.check_call([ 161 subprocess.check_call([
150 os.path.join(sky_tools_directory, 'deploy_sdk.py'), 162 os.path.join(sky_tools_directory, 'deploy_sdk.py'),
151 '--build-dir', args.build_dir, 163 '--build-dir', args.build_dir,
152 '--non-interactive', 164 '--non-interactive',
153 '--dev-environment', 165 '--dev-environment',
154 '--fake-pub-get-into', packages_root, 166 '--fake-pub-get-into', packages_root,
155 sdk_root, 167 sdk_root,
156 ]) 168 ])
157 169
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 return 202 return
191 logging.info('Killing %s (%d).' % (name, pid)) 203 logging.info('Killing %s (%d).' % (name, pid))
192 try: 204 try:
193 os.kill(pid, signal.SIGTERM) 205 os.kill(pid, signal.SIGTERM)
194 except OSError: 206 except OSError:
195 logging.info('%s (%d) already gone.' % (name, pid)) 207 logging.info('%s (%d) already gone.' % (name, pid))
196 208
197 def run(self, args, pids): 209 def run(self, args, pids):
198 self._kill_if_exists(pids, 'sky_server_pid', 'sky_server') 210 self._kill_if_exists(pids, 'sky_server_pid', 'sky_server')
199 211
200 if 'remote_sky_server_port' in self.pids: 212 if 'remote_sky_server_port' in pids:
201 port_string = 'tcp:%s' % self.pids['remote_sky_server_port'] 213 port_string = 'tcp:%s' % pids['remote_sky_server_port']
202 subprocess.call([ADB_PATH, 'reverse', '--remove', port_string]) 214 subprocess.call([ADB_PATH, 'reverse', '--remove', port_string])
203 215
204 subprocess.call([ 216 subprocess.call([
205 ADB_PATH, 'shell', 'am', 'force-stop', ANDROID_PACKAGE]) 217 ADB_PATH, 'shell', 'am', 'force-stop', ANDROID_PACKAGE])
206 218
207 pids.clear() 219 pids.clear()
208 220
209 221
210 class Analyze(object): 222 class Analyze(object):
211 def add_subparser(self, subparsers): 223 def add_subparser(self, subparsers):
212 analyze_parser = subparsers.add_parser('analyze', 224 analyze_parser = subparsers.add_parser('analyze',
213 help=('run the dart analyzer with sky url mappings')) 225 help=('run the dart analyzer with sky url mappings'))
214 analyze_parser.add_argument('app_path', type=str) 226 analyze_parser.add_argument('app_path', type=str)
215 analyze_parser.set_defaults(func=self.run) 227 analyze_parser.set_defaults(func=self.run)
216 228
217 def run(self, args, pids): 229 def run(self, args, pids):
230 build_dir = pids.get('build_dir')
231 if not build_dir:
232 logging.fatal("pids file missing build_dir. Try 'start' first.")
233 return 2
218 ANALYZER_PATH = 'third_party/dart-sdk/dart-sdk/bin/dartanalyzer' 234 ANALYZER_PATH = 'third_party/dart-sdk/dart-sdk/bin/dartanalyzer'
219 235
220 build_dir = os.path.abspath(pids['build_dir'])
221 bindings_path = os.path.join(build_dir, 'gen/sky/bindings') 236 bindings_path = os.path.join(build_dir, 'gen/sky/bindings')
222 sky_builtin_path = \ 237 sky_builtin_path = \
223 os.path.join(SRC_ROOT, 'sky/engine/bindings/builtin.dart') 238 os.path.join(SRC_ROOT, 'sky/engine/bindings/builtin.dart')
224 dart_sky_path = os.path.join(bindings_path, 'dart_sky.dart') 239 dart_sky_path = os.path.join(bindings_path, 'dart_sky.dart')
225 analyzer_args = [ANALYZER_PATH, 240 analyzer_args = [ANALYZER_PATH,
226 "--url-mapping=dart:sky,%s" % dart_sky_path, 241 "--url-mapping=dart:sky,%s" % dart_sky_path,
227 "--url-mapping=dart:sky_builtin,%s" % sky_builtin_path, 242 "--url-mapping=dart:sky_builtin,%s" % sky_builtin_path,
243 "--package-root", dev_packages_root(build_dir),
228 args.app_path 244 args.app_path
229 ] 245 ]
230 subprocess.call(analyzer_args) 246 return subprocess.call(analyzer_args)
231 247
232 class StartTracing(object): 248 class StartTracing(object):
233 def add_subparser(self, subparsers): 249 def add_subparser(self, subparsers):
234 start_tracing_parser = subparsers.add_parser('start_tracing', 250 start_tracing_parser = subparsers.add_parser('start_tracing',
235 help=('start tracing a running sky instance')) 251 help=('start tracing a running sky instance'))
236 start_tracing_parser.set_defaults(func=self.run) 252 start_tracing_parser.set_defaults(func=self.run)
237 253
238 def run(self, args, pids): 254 def run(self, args, pids):
239 subprocess.check_output([ADB_PATH, 'shell', 255 subprocess.check_output([ADB_PATH, 'shell',
240 'am', 'broadcast', 256 'am', 'broadcast',
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 args = parser.parse_args() 310 args = parser.parse_args()
295 pids = Pids.read_from(PID_FILE_PATH, PID_FILE_KEYS) 311 pids = Pids.read_from(PID_FILE_PATH, PID_FILE_KEYS)
296 exit_code = args.func(args, pids) 312 exit_code = args.func(args, pids)
297 # We could do this with an at-exit handler instead? 313 # We could do this with an at-exit handler instead?
298 pids.write_to(PID_FILE_PATH) 314 pids.write_to(PID_FILE_PATH)
299 sys.exit(exit_code) 315 sys.exit(exit_code)
300 316
301 317
302 if __name__ == '__main__': 318 if __name__ == '__main__':
303 SkyShellRunner().main() 319 SkyShellRunner().main()
OLDNEW
« no previous file with comments | « sky/sdk/packages/sky/lib/sky_tool ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698