1
0
mirror of https://github.com/ARM-software/workload-automation.git synced 2025-02-07 13:41:24 +00:00

Merge pull request #217 from jimboatarm/dump_hierarchy_uxperf

Dump hierarchy view on error
This commit is contained in:
Sebastian Goscik 2016-08-03 09:57:09 +01:00 committed by GitHub
commit 77aaa0b849
2 changed files with 21 additions and 0 deletions

View File

@ -22,6 +22,7 @@ import tempfile
import shutil import shutil
import threading import threading
import json import json
import xml.dom.minidom
from subprocess import CalledProcessError from subprocess import CalledProcessError
from wlauto.core.extension import Parameter from wlauto.core.extension import Parameter
@ -616,6 +617,17 @@ class AndroidDevice(BaseLinuxDevice): # pylint: disable=W0223
self.pull_file(on_device_file, filepath) self.pull_file(on_device_file, filepath)
self.delete_file(on_device_file) self.delete_file(on_device_file)
def capture_view_hierachy(self, filepath):
"""Captures the current view hierarchy into the specified file in a XML format."""
on_device_file = self.path.join(self.working_directory, 'screen_capture.xml')
self.execute('uiautomator dump {}'.format(on_device_file))
self.pull_file(on_device_file, filepath)
self.delete_file(on_device_file)
parsed_xml = xml.dom.minidom.parse(filepath)
with open(filepath, 'w') as f:
f.write(parsed_xml.toprettyxml())
def is_screen_on(self): def is_screen_on(self):
"""Returns ``True`` if the device screen is currently on, ``False`` otherwise.""" """Returns ``True`` if the device screen is currently on, ``False`` otherwise."""
output = self.execute('dumpsys power') output = self.execute('dumpsys power')

View File

@ -731,6 +731,13 @@ class Runner(object):
filepath = os.path.join(settings.output_directory, filename) filepath = os.path.join(settings.output_directory, filename)
self.device.capture_screen(filepath) self.device.capture_screen(filepath)
def _take_uiautomator_dump(self, filename):
if self.context.output_directory:
filepath = os.path.join(self.context.output_directory, filename)
else:
filepath = os.path.join(settings.output_directory, filename)
self.device.capture_view_hierachy(filepath)
@contextmanager @contextmanager
def _handle_errors(self, action, on_error_status=IterationResult.FAILED): def _handle_errors(self, action, on_error_status=IterationResult.FAILED):
try: try:
@ -746,6 +753,8 @@ class Runner(object):
self.current_job.result.add_event(str(we)) self.current_job.result.add_event(str(we))
try: try:
self._take_screenshot('error.png') self._take_screenshot('error.png')
if self.device.platform == 'android':
self._take_uiautomator_dump('error.xml')
except Exception, e: # pylint: disable=W0703 except Exception, e: # pylint: disable=W0703
# We're already in error state, so the fact that taking a # We're already in error state, so the fact that taking a
# screenshot failed is not surprising... # screenshot failed is not surprising...