• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
6import collections
7import logging
8import optparse
9import os
10import sys
11
12BUILD_ANDROID_DIR = os.path.join(os.path.dirname(__file__),
13                                 os.pardir,
14                                 os.pardir,
15                                 'build',
16                                 'android')
17sys.path.append(BUILD_ANDROID_DIR)
18from pylib import constants
19from pylib import flag_changer
20from pylib.device import device_utils
21
22# Browser Constants
23DEFAULT_BROWSER = 'chrome'
24
25# Action Constants
26ACTION_PACKAGE = 'org.chromium.base'
27ACTION_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}
32ACTION_LOW = ACTION_PACKAGE + '.ACTION_LOW_MEMORY'
33
34# Command Line Constants
35ENABLE_TEST_INTENTS_FLAG = '--enable-test-intents'
36
37def 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
103if __name__ == '__main__':
104  sys.exit(main(sys.argv))
105