Home | History | Annotate | Download | only in android
      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