1 #!/usr/bin/env python 2 # Copyright 2013 The Chromium Authors. All rights reserved. 3 # Use of this source code is governed by a BSD-style license that can be 4 # found in the LICENSE file. 5 6 import collections 7 import logging 8 import optparse 9 import os 10 import sys 11 12 BUILD_ANDROID_DIR = os.path.join(os.path.dirname(__file__), 13 os.pardir, 14 os.pardir, 15 'build', 16 'android') 17 sys.path.append(BUILD_ANDROID_DIR) 18 from pylib import constants 19 from pylib import flag_changer 20 from pylib.device import device_utils 21 22 # Browser Constants 23 DEFAULT_BROWSER = 'chrome' 24 25 # Action Constants 26 ACTION_PACKAGE = 'org.chromium.base' 27 ACTION_TRIM = { 28 'moderate' : ACTION_PACKAGE + '.ACTION_TRIM_MEMORY_MODERATE', 29 'critical' : ACTION_PACKAGE + '.ACTION_TRIM_MEMORY_RUNNING_CRITICAL', 30 'complete' : ACTION_PACKAGE + '.ACTION_TRIM_MEMORY' 31 } 32 ACTION_LOW = ACTION_PACKAGE + '.ACTION_LOW_MEMORY' 33 34 # Command Line Constants 35 ENABLE_TEST_INTENTS_FLAG = '--enable-test-intents' 36 37 def main(argv): 38 option_parser = optparse.OptionParser() 39 option_parser.add_option('-l', 40 '--low', 41 help='Simulate Activity#onLowMemory()', 42 action='store_true') 43 option_parser.add_option('-t', 44 '--trim', 45 help=('Simulate Activity#onTrimMemory(...) with ' + 46 ', '.join(ACTION_TRIM.keys())), 47 type='string') 48 option_parser.add_option('-b', 49 '--browser', 50 default=DEFAULT_BROWSER, 51 help=('Which browser to use. One of ' + 52 ', '.join(constants.PACKAGE_INFO.keys()) + 53 ' [default: %default]'), 54 type='string') 55 56 (options, args) = option_parser.parse_args(argv) 57 58 if len(args) > 1: 59 print 'Unknown argument: ', args[1:] 60 option_parser.print_help() 61 sys.exit(1) 62 63 if options.low and options.trim: 64 option_parser.error('options --low and --trim are mutually exclusive') 65 66 if not options.low and not options.trim: 67 option_parser.print_help() 68 sys.exit(1) 69 70 action = None 71 if options.low: 72 action = ACTION_LOW 73 elif options.trim in ACTION_TRIM.keys(): 74 action = ACTION_TRIM[options.trim] 75 76 if action is None: 77 option_parser.print_help() 78 sys.exit(1) 79 80 if not options.browser in constants.PACKAGE_INFO.keys(): 81 option_parser.error('Unknown browser option ' + options.browser) 82 83 package_info = constants.PACKAGE_INFO[options.browser] 84 85 package = package_info.package 86 activity = package_info.activity 87 88 device = device_utils.DeviceUtils(None) 89 90 try: 91 device.EnableRoot() 92 except device_errors.CommandFailedError as e: 93 # Try to change the flags and start the activity anyway. 94 # TODO(jbudorick) Handle this exception appropriately after interface 95 # conversions are finished. 96 logging.error(str(e)) 97 flags = flag_changer.FlagChanger(device, package_info.cmdline_file) 98 if ENABLE_TEST_INTENTS_FLAG not in flags.Get(): 99 flags.AddFlags([ENABLE_TEST_INTENTS_FLAG]) 100 101 device.old_interface.StartActivity(package, activity, action=action) 102 103 if __name__ == '__main__': 104 sys.exit(main(sys.argv)) 105