Index: build/android/method_count.py |
diff --git a/build/android/method_count.py b/build/android/method_count.py |
index 6569f0eeba50f2389dd6509ed874ebf7ddd68e17..264480cd6944107800c499a62419a6eac37a5e2a 100755 |
--- a/build/android/method_count.py |
+++ b/build/android/method_count.py |
@@ -20,9 +20,11 @@ sys.path.append(os.path.join(host_paths.DIR_SOURCE_ROOT, 'build', 'util', 'lib', |
import perf_tests_results_helper # pylint: disable=import-error |
+_FIELD_IDS_SIZE_RE = re.compile(r'^field_ids_size +: +(\d+)$') |
_METHOD_IDS_SIZE_RE = re.compile(r'^method_ids_size +: +(\d+)$') |
-def ExtractIfZip(dexfile, tmpdir): |
+ |
+def _ExtractIfZip(dexfile, tmpdir): |
if not os.path.splitext(dexfile)[1] in ('.zip', '.apk', '.jar'): |
return [dexfile] |
@@ -32,21 +34,41 @@ def ExtractIfZip(dexfile, tmpdir): |
return [os.path.join(tmpdir, f) for f in dex_files] |
-def SingleMethodCount(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 MethodCount(dexfile): |
+def _SingleMethodAndFieldCount(dex_path): |
jbudorick
2016/06/27 09:21:27
I forget what else is in the dexdump -- would we p
|
+ fields = None |
+ methods = None |
+ for line in dexdump.DexDump(dex_path, file_summary=True): |
+ if fields is None: |
+ m = _FIELD_IDS_SIZE_RE.match(line) |
+ if m: |
+ fields = int(m.group(1)) |
+ if methods is None: |
+ m = _METHOD_IDS_SIZE_RE.match(line) |
+ if m: |
+ methods = int(m.group(1)) |
+ if fields is None: |
+ raise Exception('"fields_ids_size" not found in dex dump of %s' % dex_path) |
+ if methods is None: |
+ raise Exception('"method_ids_size" not found in dex dump of %s' % dex_path) |
+ return fields, methods |
jbudorick
2016/06/27 09:21:27
nit: If this stays "SingleMethodAndFieldCount", it
|
+ |
+ |
+def _MethodAndFieldCount(dexfile): |
tmpdir = tempfile.mkdtemp(suffix='_dex_extract') |
- multidex_file_list = ExtractIfZip(dexfile, tmpdir) |
+ multidex_file_list = _ExtractIfZip(dexfile, tmpdir) |
try: |
- return sum(int(SingleMethodCount(d)) for d in multidex_file_list) |
+ total_fields = 0 |
+ total_methods = 0 |
+ for path in multidex_file_list: |
+ f, m = _SingleMethodAndFieldCount(path) |
+ total_fields += f |
+ total_methods += m |
+ return total_fields, total_methods |
jbudorick
2016/06/27 09:21:26
nit: same
|
finally: |
shutil.rmtree(tmpdir) |
+ |
def main(): |
parser = argparse.ArgumentParser() |
parser.add_argument( |
@@ -69,7 +91,9 @@ def main(): |
'Unable to determine apk name from %s, ' |
'and --apk-name was not provided.' % args.dexfile) |
- method_count = MethodCount(args.dexfile) |
+ field_count, method_count = _MethodAndFieldCount(args.dexfile) |
+ perf_tests_results_helper.PrintPerfResult( |
jbudorick
2016/06/27 09:21:26
kinda odd to have method_count.py doing this as we
|
+ '%s_fields' % args.apk_name, 'total', [field_count], 'fields') |
perf_tests_results_helper.PrintPerfResult( |
'%s_methods' % args.apk_name, 'total', [method_count], 'methods') |
return 0 |