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

Side by Side Diff: sky/tools/shelldb

Issue 1149113005: Speed up shelldb by skipping unnecessary copies of APK to device (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 7 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 | « no previous file | 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 signal
13 import subprocess 13 import subprocess
14 import sys 14 import sys
15 import time 15 import time
16 import urlparse 16 import urlparse
17 import hashlib
18 import tempfile
17 19
18 SKY_TOOLS_DIR = os.path.dirname(os.path.abspath(__file__)) 20 SKY_TOOLS_DIR = os.path.dirname(os.path.abspath(__file__))
19 SKY_ROOT = os.path.dirname(SKY_TOOLS_DIR) 21 SKY_ROOT = os.path.dirname(SKY_TOOLS_DIR)
20 SRC_ROOT = os.path.dirname(SKY_ROOT) 22 SRC_ROOT = os.path.dirname(SKY_ROOT)
21 23
22 SKY_SERVER_PORT = 9888 24 SKY_SERVER_PORT = 9888
23 OBSERVATORY_PORT = 8181 25 OBSERVATORY_PORT = 8181
24 DEFAULT_URL = "sky://domokit.github.io/sky_home" 26 DEFAULT_URL = "sky://domokit.github.io/sky_home"
25 APK_NAME = 'SkyDemo.apk' 27 APK_NAME = 'SkyDemo.apk'
26 ADB_PATH = os.path.join(SRC_ROOT, 28 ADB_PATH = os.path.join(SRC_ROOT,
27 'third_party/android_tools/sdk/platform-tools/adb') 29 'third_party/android_tools/sdk/platform-tools/adb')
28 ANDROID_PACKAGE = "org.domokit.sky.demo" 30 ANDROID_PACKAGE = "org.domokit.sky.demo"
31 SHA1_PATH = '/sdcard/%s/%s.sha1' % (ANDROID_PACKAGE, APK_NAME)
29 32
30 PID_FILE_PATH = "/tmp/skydemo.pids" 33 PID_FILE_PATH = "/tmp/skydemo.pids"
31 PID_FILE_KEYS = frozenset([ 34 PID_FILE_KEYS = frozenset([
32 'remote_sky_server_port', 35 'remote_sky_server_port',
33 'sky_server_pid', 36 'sky_server_pid',
34 'sky_server_port', 37 'sky_server_port',
35 'sky_server_root', 38 'sky_server_root',
36 'build_dir', 39 'build_dir',
37 ]) 40 ])
38 41
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 189
187 packages_root = dev_packages_root(args.build_dir) 190 packages_root = dev_packages_root(args.build_dir)
188 sky_server = self._sky_server_for_args(args, packages_root) 191 sky_server = self._sky_server_for_args(args, packages_root)
189 pids['sky_server_pid'] = sky_server.start() 192 pids['sky_server_pid'] = sky_server.start()
190 pids['sky_server_port'] = sky_server.port 193 pids['sky_server_port'] = sky_server.port
191 pids['sky_server_root'] = sky_server.root 194 pids['sky_server_root'] = sky_server.root
192 195
193 pids['build_dir'] = os.path.abspath(args.build_dir) 196 pids['build_dir'] = os.path.abspath(args.build_dir)
194 197
195 if args.install: 198 if args.install:
196 # -r to replace an existing apk, -d to allow version downgrade. 199 # We might need to install a new APK, so check SHA1
197 subprocess.check_call([ADB_PATH, 'install', '-r', '-d', apk_path]) 200 source_sha1 = hashlib.sha1(open(apk_path, 'rb').read()).hexdigest()
201 dest_sha1 = subprocess.check_output([ADB_PATH, 'shell', 'cat', SHA1_ PATH])
202 use_existing_apk = False
203 if source_sha1 == dest_sha1:
204 # Make sure that the APK didn't get uninstalled somehow
205 use_existing_apk = subprocess.check_output([
206 ADB_PATH, 'shell', 'pm', 'list', 'packages', ANDROID_PACKAGE
207 ])
198 else: 208 else:
209 # User is telling us not to bother installing an APK
210 use_existing_apk = True
211
212 if use_existing_apk:
213 # APK is already on the device, we only need to stop it
199 subprocess.check_call([ 214 subprocess.check_call([
200 ADB_PATH, 'shell', 'am', 'force-stop', ANDROID_PACKAGE 215 ADB_PATH, 'shell', 'am', 'force-stop', ANDROID_PACKAGE
201 ]) 216 ])
217 else:
218 # Slow path, need to upload a new APK to the device
219 # -r to replace an existing apk, -d to allow version downgrade.
220 subprocess.check_call([ADB_PATH, 'install', '-r', '-d', apk_path])
221 # record the SHA1 of the APK we just pushed
222 with tempfile.NamedTemporaryFile() as fp:
223 fp.write(source_sha1)
224 fp.seek(0)
225 subprocess.check_call([ADB_PATH, 'push', fp.name, SHA1_PATH])
202 226
203 # Set up port forwarding for observatory 227 # Set up port forwarding for observatory
204 port_string = 'tcp:%s' % OBSERVATORY_PORT 228 port_string = 'tcp:%s' % OBSERVATORY_PORT
205 subprocess.check_call([ 229 subprocess.check_call([
206 ADB_PATH, 'forward', port_string, port_string 230 ADB_PATH, 'forward', port_string, port_string
207 ]) 231 ])
208 232
209 port_string = 'tcp:%s' % sky_server.port 233 port_string = 'tcp:%s' % sky_server.port
210 subprocess.check_call([ 234 subprocess.check_call([
211 ADB_PATH, 'reverse', port_string, port_string 235 ADB_PATH, 'reverse', port_string, port_string
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 args = parser.parse_args() 383 args = parser.parse_args()
360 pids = Pids.read_from(PID_FILE_PATH, PID_FILE_KEYS) 384 pids = Pids.read_from(PID_FILE_PATH, PID_FILE_KEYS)
361 exit_code = args.func(args, pids) 385 exit_code = args.func(args, pids)
362 # We could do this with an at-exit handler instead? 386 # We could do this with an at-exit handler instead?
363 pids.write_to(PID_FILE_PATH) 387 pids.write_to(PID_FILE_PATH)
364 sys.exit(exit_code) 388 sys.exit(exit_code)
365 389
366 390
367 if __name__ == '__main__': 391 if __name__ == '__main__':
368 SkyShellRunner().main() 392 SkyShellRunner().main()
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698