def __init__(self, raise_error_on_hang=True): """ Analyzes the initial state of the GPU and log history. """ # Attempt flushing system logs every second instead of every 10 minutes. self.dirty_writeback_centisecs = utils.get_dirty_writeback_centisecs() utils.set_dirty_writeback_centisecs(100) self._raise_error_on_hang = raise_error_on_hang logging.info(utils.get_board_with_frequency_and_memory()) self.graphics_kernel_memory = GraphicsKernelMemory() if utils.get_cpu_arch() != 'arm': if is_sw_rasterizer(): raise error.TestFail('Refusing to run on SW rasterizer.') logging.info('Initialize: Checking for old GPU hangs...') messages = open(self._MESSAGES_FILE, 'r') for line in messages: for hang in self._HANGCHECK: if hang in line: logging.info(line) self.existing_hangs[line] = line messages.close()
def finalize(self): """ Analyzes the state of the GPU, log history and emits warnings or errors if the state changed since initialize. Also makes a note of the Chrome version for later usage in the perf-dashboard. """ utils.set_dirty_writeback_centisecs(self.dirty_writeback_centisecs) new_gpu_hang = False new_gpu_warning = False if utils.get_cpu_arch() != 'arm': logging.info('Cleanup: Checking for new GPU hangs...') messages = open(self._MESSAGES_FILE, 'r') for line in messages: for hang in self._HANGCHECK: if hang in line: if not line in self.existing_hangs.keys(): logging.info(line) for warn in self._HANGCHECK_WARNING: if warn in line: new_gpu_warning = True logging.warning( 'Saw GPU hang warning during test.') else: logging.warning( 'Saw GPU hang during test.') new_gpu_hang = True messages.close() if not self._run_on_sw_rasterizer and is_sw_rasterizer(): logging.warning('Finished test on SW rasterizer.') raise error.TestFail('Finished test on SW rasterizer.') if self._raise_error_on_hang and new_gpu_hang: raise error.TestError('Detected GPU hang during test.') if new_gpu_hang: raise error.TestWarn('Detected GPU hang during test.') if new_gpu_warning: raise error.TestWarn('Detected GPU warning during test.')