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

Unified Diff: telemetry/telemetry/internal/backends/chrome/desktop_browser_backend.py

Issue 2052353003: Adding utility methods to retrieve minidump paths from the browser. (Closed) Base URL: git@github.com:catapult-project/catapult@master
Patch Set: Refactoring GetAllMinidumpPaths to check breakpad format when crashpad_database_util isn't present. Created 4 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
Index: telemetry/telemetry/internal/backends/chrome/desktop_browser_backend.py
diff --git a/telemetry/telemetry/internal/backends/chrome/desktop_browser_backend.py b/telemetry/telemetry/internal/backends/chrome/desktop_browser_backend.py
index 3e9ac8e1f839a29f8b5f7d00a6266e620dd7a56f..e10389d58410a7f816cd73c70f70564aa3ccf1a6 100644
--- a/telemetry/telemetry/internal/backends/chrome/desktop_browser_backend.py
+++ b/telemetry/telemetry/internal/backends/chrome/desktop_browser_backend.py
@@ -114,6 +114,7 @@ class DesktopBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
self._proc = None
self._tmp_profile_dir = None
self._tmp_output_file = None
+ self._most_recent_symbolized_minidump_paths = set([])
self._executable = executable
if not self._executable:
@@ -332,7 +333,7 @@ class DesktopBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
except IOError:
return ''
- def _GetMostRecentCrashpadMinidump(self):
+ def _GetAllCrashpadMinidumps(self):
os_name = self.browser.platform.GetOSName()
arch_name = self.browser.platform.GetArchName()
try:
@@ -391,12 +392,19 @@ class DesktopBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
logging.warning('Crashpad report expected valid keys'
' "Path" and "Creation time": %s', e)
+ return reports_list
+
+ def _GetMostRecentCrashpadMinidump(self):
+ reports_list = self._GetAllCrashpadMinidumps()
if reports_list:
_, most_recent_report_path = max(reports_list)
return most_recent_report_path
return None
+ def _GetBreakPadMinidumpPaths(self):
+ return glob.glob(os.path.join(self._tmp_minidump_dir, '*.dmp'))
+
def _GetMostRecentMinidump(self):
# Crashpad dump layout will be the standard eventually, check it first.
most_recent_dump = self._GetMostRecentCrashpadMinidump()
@@ -404,7 +412,7 @@ class DesktopBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
# Typical breakpad format is simply dump files in a folder.
if not most_recent_dump:
logging.info('No minidump found via crashpad_database_util')
- dumps = glob.glob(os.path.join(self._tmp_minidump_dir, '*.dmp'))
+ dumps = self._GetBreakPadMinidumpPaths()
if dumps:
most_recent_dump = heapq.nlargest(1, dumps, os.path.getmtime)[0]
if most_recent_dump:
@@ -502,13 +510,42 @@ class DesktopBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
if not most_recent_dump:
return (False, 'No crash dump found.')
logging.info('Minidump found: %s' % most_recent_dump)
- stack = self._GetStackFromMinidump(most_recent_dump)
+ return self._InternalSymbolizeMinidump(most_recent_dump)
+
+ def GetMostRecentMinidumpPath(self):
+ return self._GetMostRecentMinidump()
+
+ def GetAllMinidumpPaths(self):
+ reports_list = self._GetAllCrashpadMinidumps()
+ if reports_list:
+ return [report[1] for report in reports_list]
+ else:
+ logging.info('No minidump found via crashpad_database_util')
+ dumps = self._GetBreakPadMinidumpPaths()
+ if dumps:
+ logging.info('Found minidump via globbing in minidump dir')
+ return dumps
+ return None
+
+ def GetAllUnsymbolizedMinidumpPaths(self):
+ minidump_paths = set(self.GetAllMinidumpPaths())
+ # If we have already symbolized paths remove them from the list
+ unsymbolized_paths = (minidump_paths
+ - self._most_recent_symbolized_minidump_paths)
+ return list(unsymbolized_paths)
+
+ def SymbolizeMinidump(self, minidump_path):
+ return self._InternalSymbolizeMinidump(minidump_path)
+
+ def _InternalSymbolizeMinidump(self, minidump_path):
+ stack = self._GetStackFromMinidump(minidump_path)
if not stack:
- cloud_storage_link = self._UploadMinidumpToCloudStorage(most_recent_dump)
+ cloud_storage_link = self._UploadMinidumpToCloudStorage(minidump_path)
error_message = ('Failed to symbolize minidump. Raw stack is uploaded to'
' cloud storage: %s.' % cloud_storage_link)
return (False, error_message)
+ self._most_recent_symbolized_minidump_paths.add(minidump_path)
return (True, stack)
def __del__(self):

Powered by Google App Engine
This is Rietveld 408576698