public static function generate_extra_data(&$test_result, &$test_log_file = null) { $parse_xml_file = $test_result->test_profile->get_file_parser_spec(); if ($parse_xml_file == false) { return; } $results_parser_xml = new pts_parse_results_nye_XmlReader($parse_xml_file); $extra_data_identifiers = $results_parser_xml->getXMLArrayValues('PhoronixTestSuite/ExtraData/Identifier'); $extra_results = array(); foreach (array_keys($extra_data_identifiers) as $i) { $id = $extra_data_identifiers[$i]; $frame_all_times = array(); switch ($id) { case 'libframetime-output': // libframetime output $line_values = explode(PHP_EOL, file_get_contents($test_log_file)); if (!empty($line_values) && isset($line_values[3])) { foreach ($line_values as &$v) { if (substr($v, -3) == ' us' && substr($v, 0, 10) == 'Frametime ') { $frametime = substr($v, 10); $frametime = substr($frametime, 0, -3); if ($frametime > 2000) { $frametime = $frametime / 1000; array_push($frame_all_times, $frametime); } } } $frame_all_times = pts_math::remove_outliers($frame_all_times); } break; case 'csv-dump-frame-latencies': // Civ Beyond Earth $csv_values = explode(',', pts_file_io::file_get_contents($test_log_file)); if (!empty($csv_values) && isset($csv_values[3])) { foreach ($csv_values as $i => &$v) { if (!is_numeric($v)) { unset($csv_values[$i]); continue; } array_push($frame_all_times, $v); } } break; case 'com-speeds-frame-latency-totals': // id Tech Games $log_file = pts_file_io::file_get_contents($test_log_file); $frame_all_times = array(); while ($log_file = strstr($log_file, 'frame:')) { if (($a = strpos($log_file, ' all: ')) !== false && $a < strpos($log_file, "\n")) { $all = ltrim(substr($log_file, $a + 6)); $all = substr($all, 0, strpos($all, ' ')); if (is_numeric($all) && $all > 0) { array_push($frame_all_times, $all); } } $log_file = strstr($log_file, 'bk:'); } break; } if (isset($frame_all_times[60])) { // Take off the first frame as it's likely to have taken much longer when game just starting off... array_shift($frame_all_times); $tp = clone $test_result->test_profile; $tp->set_result_scale('Milliseconds'); $tp->set_result_proportion('LIB'); $tp->set_display_format('LINE_GRAPH'); $tp->set_identifier(null); $extra_result = new pts_test_result($tp); $extra_result->set_used_arguments_description('Total Frame Time'); $extra_result->set_result(implode(',', $frame_all_times)); array_push($extra_results, $extra_result); //$extra_result->set_used_arguments(phodevi::sensor_name($sensor) . ' ' . $test_result->get_arguments()); } } if (!empty($extra_results)) { $test_result->secondary_linked_results = $extra_results; } }