Index: build/android/method_count.py |
diff --git a/build/android/method_count.py b/build/android/method_count.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..93250b5c542fb28d60574b3ed4ba2e615a53c29b |
--- /dev/null |
+++ b/build/android/method_count.py |
@@ -0,0 +1,55 @@ |
+#! /usr/bin/env python |
+# Copyright 2015 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+import argparse |
+import os |
+import re |
+import sys |
+ |
+from pylib import constants |
+from pylib.sdk import dexdump |
+ |
+sys.path.append(os.path.join(constants.DIR_SOURCE_ROOT, 'build', 'util', 'lib', |
+ 'common')) |
+import perf_tests_results_helper |
+ |
+ |
+_METHOD_IDS_SIZE_RE = re.compile(r'^method_ids_size +: +(\d+)$') |
+ |
+def MethodCount(dexfile): |
+ for line in dexdump.DexDump(dexfile, file_summary=True): |
+ m = _METHOD_IDS_SIZE_RE.match(line) |
+ if m: |
+ return m.group(1) |
+ raise Exception('"method_ids_size" not found in dex dump of %s' % dexfile) |
+ |
+def main(): |
+ parser = argparse.ArgumentParser() |
+ parser.add_argument( |
+ '--apk-name', help='Name of the APK to which the dexfile corresponds.') |
+ parser.add_argument('dexfile') |
+ |
+ args = parser.parse_args() |
+ |
+ if not args.apk_name: |
+ dirname, basename = os.path.split(args.dexfile) |
+ while basename: |
+ if 'apk' in basename: |
+ args.apk_name = basename |
+ break |
+ dirname, basename = os.path.split(dirname) |
+ else: |
+ parser.error( |
+ 'Unable to determine apk name from %s, ' |
+ 'and --apk-name was not provided.' % args.dexfile) |
+ |
+ method_count = MethodCount(args.dexfile) |
+ perf_tests_results_helper.PrintPerfResult( |
+ '%s_methods' % args.apk_name, 'total', [method_count], 'methods') |
+ return 0 |
+ |
+if __name__ == '__main__': |
+ sys.exit(main()) |
+ |