Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(107)

Unified Diff: build/android/tombstones.py

Issue 2974163002: Fix the stack script issue when symbolizing tombstones. (Closed)
Patch Set: add todo and crbug; revert changes for intentional crash test case Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « build/android/test_runner.pydeps ('k') | build/config/android/internal_rules.gni » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build/android/tombstones.py
diff --git a/build/android/tombstones.py b/build/android/tombstones.py
index dbc6281c2f541af6cde7978be0c12115210379f7..6e711ffb8554ffce12750279dd72d2e32e88e9b0 100755
--- a/build/android/tombstones.py
+++ b/build/android/tombstones.py
@@ -12,12 +12,11 @@
import argparse
import datetime
import logging
-import multiprocessing
import os
-import re
-import subprocess
import sys
+from multiprocessing.pool import ThreadPool
+
import devil_chromium
from devil.android import device_blacklist
@@ -25,6 +24,7 @@ from devil.android import device_errors
from devil.android import device_utils
from devil.utils import run_tests_helper
from pylib import constants
+from pylib.symbols import stack_symbolizer
_TZ_UTC = {'TZ': 'UTC'}
@@ -96,51 +96,9 @@ def _EraseTombstone(device, tombstone_file):
as_root=True, check_return=True)
-def _DeviceAbiToArch(device_abi):
- # The order of this list is significant to find the more specific match (e.g.,
- # arm64) before the less specific (e.g., arm).
- arches = ['arm64', 'arm', 'x86_64', 'x86_64', 'x86', 'mips']
- for arch in arches:
- if arch in device_abi:
- return arch
- raise RuntimeError('Unknown device ABI: %s' % device_abi)
-
-
-def _ResolveSymbols(tombstone_data, include_stack, device_abi):
- """Run the stack tool for given tombstone input.
-
- Args:
- tombstone_data: a list of strings of tombstone data.
- include_stack: boolean whether to include stack data in output.
- device_abi: the default ABI of the device which generated the tombstone.
-
- Yields:
- A string for each line of resolved stack output.
- """
- # Check if the tombstone data has an ABI listed, if so use this in preference
- # to the device's default ABI.
- for line in tombstone_data:
- found_abi = re.search('ABI: \'(.+?)\'', line)
- if found_abi:
- device_abi = found_abi.group(1)
- arch = _DeviceAbiToArch(device_abi)
- if not arch:
- return
-
- stack_tool = os.path.join(os.path.dirname(__file__), '..', '..',
- 'third_party', 'android_platform', 'development',
- 'scripts', 'stack')
- cmd = [stack_tool, '--arch', arch, '--output-directory',
- constants.GetOutDirectory()]
- proc = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
- output = proc.communicate(input='\n'.join(tombstone_data))[0]
- for line in output.split('\n'):
- if not include_stack and 'Stack Data:' in line:
- break
- yield line
-
-
-def _ResolveTombstone(tombstone):
+def _ResolveTombstone(args):
+ tombstone = args[0]
+ tombstone_symbolizer = args[1]
lines = []
lines += [tombstone['file'] + ' created on ' + str(tombstone['time']) +
', about this long ago: ' +
@@ -148,26 +106,31 @@ def _ResolveTombstone(tombstone):
' Device: ' + tombstone['serial'])]
logging.info('\n'.join(lines))
logging.info('Resolving...')
- lines += _ResolveSymbols(tombstone['data'], tombstone['stack'],
- tombstone['device_abi'])
+ lines += tombstone_symbolizer.ExtractAndResolveNativeStackTraces(
+ tombstone['data'],
+ tombstone['device_abi'],
+ tombstone['stack'])
return lines
-def _ResolveTombstones(jobs, tombstones):
+def _ResolveTombstones(jobs, tombstones, tombstone_symbolizer):
"""Resolve a list of tombstones.
Args:
- jobs: the number of jobs to use with multiprocess.
+ jobs: the number of jobs to use with multithread.
tombstones: a list of tombstones.
"""
if not tombstones:
logging.warning('No tombstones to resolve.')
return []
+ tombstone_symbolizer.UnzipAPKIfNecessary()
if len(tombstones) == 1:
- data = [_ResolveTombstone(tombstones[0])]
+ data = [_ResolveTombstone([tombstones[0], tombstone_symbolizer])]
else:
- pool = multiprocessing.Pool(processes=jobs)
- data = pool.map(_ResolveTombstone, tombstones)
+ pool = ThreadPool(jobs)
+ data = pool.map(
+ _ResolveTombstone,
+ [[tombstone, tombstone_symbolizer] for tombstone in tombstones])
resolved_tombstones = []
for tombstone in data:
resolved_tombstones.extend(tombstone)
@@ -236,7 +199,9 @@ def ClearAllTombstones(device):
def ResolveTombstones(device, resolve_all_tombstones, include_stack_symbols,
- wipe_tombstones, jobs=4):
+ wipe_tombstones, jobs=4,
+ apk_under_test=None, enable_relocation_packing=None,
+ tombstone_symbolizer=None):
"""Resolve tombstones in the device.
Args:
@@ -253,7 +218,11 @@ def ResolveTombstones(device, resolve_all_tombstones, include_stack_symbols,
_GetTombstonesForDevice(device,
resolve_all_tombstones,
include_stack_symbols,
- wipe_tombstones))
+ wipe_tombstones),
+ (tombstone_symbolizer
+ or stack_symbolizer.Symbolizer(
+ apk_under_test,
+ enable_relocation_packing)))
def main():
« no previous file with comments | « build/android/test_runner.pydeps ('k') | build/config/android/internal_rules.gni » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698