Index: tools/telemetry/telemetry/core/chrome/android_browser_backend.py |
diff --git a/tools/telemetry/telemetry/core/chrome/android_browser_backend.py b/tools/telemetry/telemetry/core/chrome/android_browser_backend.py |
index d80614c490905b879e1f8a35be5b635ee29b9773..96c17bb360ef0ead88501d8d856deac08bbdc5b4 100644 |
--- a/tools/telemetry/telemetry/core/chrome/android_browser_backend.py |
+++ b/tools/telemetry/telemetry/core/chrome/android_browser_backend.py |
@@ -6,10 +6,10 @@ import logging |
import os |
import subprocess |
import sys |
-import tempfile |
import time |
from telemetry.core import exceptions |
+from telemetry.core import util |
from telemetry.core.chrome import adb_commands |
from telemetry.core.chrome import browser_backend |
@@ -261,31 +261,28 @@ class AndroidBrowserBackend(browser_backend.BrowserBackend): |
return local_port |
def GetStandardOutput(self): |
- # If we can find symbols and there is a stack, output the symbolized stack. |
- symbol_paths = [ |
- os.path.join(adb_commands.GetOutDirectory(), 'Release', 'lib'), |
- os.path.join(adb_commands.GetOutDirectory(), 'Debug', 'lib'), |
- os.path.join(adb_commands.GetOutDirectory(), 'Release', 'lib.target'), |
- os.path.join(adb_commands.GetOutDirectory(), 'Debug', 'lib.target')] |
- for symbol_path in symbol_paths: |
- if not os.path.isdir(symbol_path): |
- continue |
- with tempfile.NamedTemporaryFile() as f: |
- lines = self._adb.RunShellCommand('logcat -d') |
- for line in lines: |
- f.write(line + '\n') |
- symbolized_stack = None |
- try: |
- logging.info('Symbolizing stack...') |
- symbolized_stack = subprocess.Popen([ |
- 'ndk-stack', '-sym', symbol_path, |
- '-dump', f.name], stdout=subprocess.PIPE).communicate()[0] |
- except Exception: |
- pass |
- if symbolized_stack: |
- return symbolized_stack |
- # Otherwise, just return the last 100 lines of logcat. |
- return '\n'.join(self._adb.RunShellCommand('logcat -d -t 100')) |
+ def Decorate(title, content): |
+ return title + '\n' + content + '\n' + '*' * 80 + '\n' |
+ # Get the last lines of logcat (large enough to contain stacktrace) |
+ logcat = '\n'.join(self._adb.RunShellCommand('logcat -d -t 500')) |
+ ret = Decorate('Logcat', logcat) |
+ stack = os.path.join(util.GetChromiumSrcDir(), 'third_party', |
+ 'android_platform', 'development', 'scripts', 'stack') |
+ # Try to symbolize logcat. |
+ if os.path.exists(stack): |
+ p = subprocess.Popen([stack], stdin=subprocess.PIPE, |
+ stdout=subprocess.PIPE) |
+ ret += Decorate('Stack from Logcat', p.communicate(input=logcat)[0]) |
+ |
+ # Try to get tombstones. |
+ tombstones = os.path.join(util.GetChromiumSrcDir(), 'build', 'android', |
+ 'tombstones.py') |
+ if os.path.exists(tombstones): |
+ ret += Decorate('Tombstones', |
+ subprocess.Popen([tombstones, '-w', '--device', |
+ self._adb.device()], |
+ stdout=subprocess.PIPE).communicate()[0]) |
+ return ret |
def CreateForwarder(self, *port_pairs): |
return adb_commands.Forwarder(self._adb, *port_pairs) |