def set_result(self, values, visible_columns={}): """Set the result of this run. @param values: a dictionary with result values as returned by RunExecutor.execute_run(), may also contain arbitrary additional values @param visible_columns: a set of keys of values that should be visible by default (i.e., not marked as hidden), apart from those that BenchExec shows by default anyway """ exitcode = values.pop("exitcode", None) if exitcode is not None: if exitcode.signal: self.values["@exitsignal"] = exitcode.signal else: self.values["@returnvalue"] = exitcode.value for key, value in values.items(): if key == "cpuenergy" and not isinstance(value, (str, bytes)): energy = intel_cpu_energy.format_energy_results(value) for energy_key, energy_value in energy.items(): if energy_key != "cpuenergy": energy_key = "@" + energy_key self.values[energy_key] = energy_value elif key in ["walltime", "cputime", "memory", "cpuenergy"]: self.values[key] = value elif key in visible_columns: self.values[key] = value else: self.values["@" + key] = value termination_reason = values.get("terminationreason") # Termination reason was not fully precise for timeouts, so we guess "timeouts" # if time is too high. Since removal of ulimit time limit this should not be # necessary, but also does not harm. We might reconsider this in the future. isTimeout = (termination_reason in ["cputime", "cputime-soft", "walltime"] or self._is_timeout()) # read output try: with open(self.log_file, "rt", errors="ignore") as outputFile: output = outputFile.readlines() # first 6 lines are for logging, rest is output of subprocess, see runexecutor.py for details output = output[6:] except OSError as e: logging.warning("Cannot read log file: %s", e.strerror) output = [] self.status = self._analyze_result(exitcode, output, isTimeout, termination_reason) self.category = result.get_result_category(self.expected_results, self.status, self.properties) for column in self.columns: substitutedColumnText = substitute_vars([column.text], self.runSet, self.sourcefiles[0])[0] column.value = self.runSet.benchmark.tool.get_value_from_output( output, substitutedColumnText)
def add_values_to_run_set_xml(self, runSet, cputime, walltime, energy): """ This function adds the result values to the XML representation of a runSet. """ self.add_column_to_xml(runSet.xml, 'cputime', cputime) self.add_column_to_xml(runSet.xml, 'walltime', walltime) energy = intel_cpu_energy.format_energy_results(energy) for energy_key, energy_value in energy.items(): self.add_column_to_xml(runSet.xml, energy_key, energy_value)
def add_values_to_run_set_xml(self, runSet, cputime, walltime, energy): """ This function adds the result values to the XML representation of a runSet. """ self.add_column_to_xml(runSet.xml, 'cputime', cputime) self.add_column_to_xml(runSet.xml, 'walltime', walltime) energy = intel_cpu_energy.format_energy_results(energy) for energy_key, energy_value in energy.items(): self.add_column_to_xml(runSet.xml, energy_key, energy_value)
def set_result(self, values, visible_columns={}): """Set the result of this run. Use this method instead of manually setting the run attributes and calling after_execution(), this method handles all this by itself. @param values: a dictionary with result values as returned by RunExecutor.execute_run(), may also contain arbitrary additional values @param visible_columns: a set of keys of values that should be visible by default (i.e., not marked as hidden), apart from those that BenchExec shows by default anyway """ exitcode = values.pop('exitcode', None) if exitcode is not None: self.values['@exitcode'] = exitcode exitcode = util.ProcessExitCode.from_raw(exitcode) if exitcode.signal: self.values['@exitsignal'] = exitcode.signal else: self.values['@returnvalue'] = exitcode.value for key, value in values.items(): if key == 'walltime': self.walltime = value elif key == 'cputime': self.cputime = value elif key == 'memory': self.values['memUsage'] = value elif key == 'cpuenergy' and not isinstance(value, (str, bytes)): energy = intel_cpu_energy.format_energy_results(value) for energy_key, energy_value in energy.items(): if energy_key != 'cpuenergy': energy_key = '@' + energy_key self.values[energy_key] = energy_value elif key == 'cpuenergy': self.values[key] = value elif key in visible_columns: self.values[key] = value else: self.values['@' + key] = value self.after_execution( exitcode, termination_reason=values.get('terminationreason'))
def set_result(self, values, visible_columns={}): """Set the result of this run. Use this method instead of manually setting the run attributes and calling after_execution(), this method handles all this by itself. @param values: a dictionary with result values as returned by RunExecutor.execute_run(), may also contain arbitrary additional values @param visible_columns: a set of keys of values that should be visible by default (i.e., not marked as hidden), apart from those that BenchExec shows by default anyway """ exitcode = values.pop('exitcode', None) if exitcode is not None: self.values['@exitcode'] = exitcode exitcode = util.ProcessExitCode.from_raw(exitcode) if exitcode.signal: self.values['@exitsignal'] = exitcode.signal else: self.values['@returnvalue'] = exitcode.value for key, value in values.items(): if key == 'walltime': self.walltime = value elif key == 'cputime': self.cputime = value elif key == 'memory': self.values['memUsage'] = value elif key == 'cpuenergy' and not isinstance(value, (str, bytes)): energy = intel_cpu_energy.format_energy_results(value) for energy_key, energy_value in energy.items(): if energy_key != 'cpuenergy': energy_key = '@' + energy_key self.values[energy_key] = energy_value elif key == 'cpuenergy': self.values[key] = value elif key in visible_columns: self.values[key] = value else: self.values['@' + key] = value self.after_execution(exitcode, termination_reason=values.get('terminationreason'))