/** * UserTimingHtmlTable constructor. * @param TestRunResults $runResults Run results to use for the table */ public function __construct($runResults) { $this->runResults = $runResults; $this->hasNavTiming = $runResults->hasValidMetric("loadEventStart") || $runResults->hasValidMetric("domContentLoadedEventStart"); $this->hasUserTiming = $this->_initUserTimings(); $this->hasFirstPaint = $this->runResults->hasValidMetric("firstPaint"); $this->hasDomInteractive = $this->runResults->hasValidMetric("domInteractive"); $this->isMultistep = $runResults->countSteps() > 1; }
/** * RunResultHtmlTable constructor. * @param TestInfo $testInfo * @param TestRunResults $runResults * @param TestRunResults $rvRunResults Optional. Run results of the repeat view */ public function __construct($testInfo, $runResults, $rvRunResults = null) { $this->testInfo = $testInfo; $this->runResults = $runResults; $this->rvRunResults = $rvRunResults; $this->isMultistep = $runResults->isMultistep(); $this->leftOptionalColumns = array(self::COL_LABEL, self::COL_ABOVE_THE_FOLD, self::COL_USER_TIME, self::COL_DOM_TIME, self::COL_DOM_ELEMENTS, self::COL_SPEED_INDEX, self::COL_VISUAL_COMPLETE, self::COL_RESULT); $this->rightOptionalColumns = array(self::COL_COST); $this->enabledColumns = array(); // optional columns default setting based on data $this->enabledColumns[self::COL_LABEL] = $this->testInfo->getRuns() > 1 || $this->isMultistep || $this->rvRunResults; $this->enabledColumns[self::COL_ABOVE_THE_FOLD] = $testInfo->hasAboveTheFoldTime(); $this->enabledColumns[self::COL_RESULT] = true; $checkByMetric = array(self::COL_USER_TIME, self::COL_DOM_TIME, self::COL_DOM_ELEMENTS, self::COL_SPEED_INDEX, self::COL_VISUAL_COMPLETE); foreach ($checkByMetric as $col) { $this->enabledColumns[$col] = $runResults->hasValidMetric($col) || $rvRunResults && $rvRunResults->hasValidMetric($col); } }
/** * @param TestRunResults $testRunResults * @return array With numSteps, run, and tester info */ private function basicRunInfoArray($testRunResults) { $ret = array(); $run = $testRunResults->getRunNumber(); $ret["numSteps"] = $testRunResults->countSteps(); $ret['run'] = $run; $ret['tester'] = $this->testInfo->getTester($run); return $ret; }
private function getTestRunResultsWithInvalid() { $step4 = array('result' => 404, 'TTFB' => 500, 'loadTime' => 1000); // result is error $steps = $this->getTestStepArray(); $steps[] = TestStepResult::fromPageData($this->testInfo, $step4, 2, false, 4); return TestRunResults::fromStepResults($this->testInfo, 2, false, $steps); }
private static function singlestepRunFromPageData($testInfo, $runNumber, $cached, &$runs) { $cacheIdx = $cached ? 1 : 0; if (empty($runs[$cacheIdx])) { return null; } $step = TestStepResult::fromPageData($testInfo, $runs[$cacheIdx], $runNumber, $cached, 1); return TestRunResults::fromStepResults($testInfo, $runNumber, $cached, array($step)); }
private function getTestRunResults($numSteps) { $steps = $this->getTestStepArray(); return TestRunResults::fromStepResults($this->testInfo, 2, true, array_slice($steps, 0, $numSteps)); }
<?php include 'common.inc'; require_once __DIR__ . '/include/TestInfo.php'; require_once __DIR__ . '/include/TestPaths.php'; require_once __DIR__ . '/include/TestRunResults.php'; require_once __DIR__ . '/include/DomainBreakdownHtmlSnippet.php'; require_once __DIR__ . '/include/AccordionHtmlHelper.php'; $page_keywords = array('Domains', 'Webpagetest', 'Website Speed Test'); $page_description = "Website domain breakdown{$testLabel}"; $testInfo = TestInfo::fromFiles($testPath); $firstViewResults = TestRunResults::fromFiles($testInfo, $run, false); $isMultistep = $firstViewResults->countSteps() > 1; $repeatViewResults = null; if (!$testInfo->isFirstViewOnly()) { $repeatViewResults = TestRunResults::fromFiles($testInfo, $run, true); } if (array_key_exists('f', $_REQUEST) && $_REQUEST['f'] == 'json') { $domains = array('firstView' => $firstViewResults->getStepResult(1)->getJSFriendlyDomainBreakdown(true)); if ($repeatViewResults) { $domains['repeatView'] = $repeatViewResults->getStepResult(1)->getJSFriendlyDomainBreakdown(true); } $output = array('domains' => $domains); json_response($output); exit; } ?> <!DOCTYPE html> <html>
/** * Parse the page data and load the optimization-specific details for a complete run * * @param TestRunResults $testRunResults Results of the run to get the grades for * @return array|null An array with all labels, scores, grades, weights, etc per score */ function getOptimizationGradesForRun($testRunResults) { if (!isset($testRunResults)) { return null; } $scores = array(); $scores['keep-alive'] = $testRunResults->averageMetric('score_keep-alive'); $scores['gzip'] = $testRunResults->averageMetric('score_gzip'); $scores['image_compression'] = $testRunResults->averageMetric('score_compress'); $scores['caching'] = $testRunResults->averageMetric('score_cache'); $scores['combine'] = $testRunResults->averageMetric('score_combine'); $scores['cdn'] = $testRunResults->averageMetric('score_cdn'); $scores['cookies'] = $testRunResults->averageMetric('score_cookies'); $scores['minify'] = $testRunResults->averageMetric('score_minify'); $scores['e-tags'] = $testRunResults->averageMetric('score_etags'); $scores['progressive_jpeg'] = $testRunResults->averageMetric('score_progressive_jpeg'); $numTTFBScores = 0; $sumTTFBScores = 0.0; for ($i = 1; $i <= $testRunResults->countSteps(); $i++) { $stepResult = $testRunResults->getStepResult($i); $pageData = $stepResult->getRawResults(); $ttfb = (int) $pageData['TTFB']; $latency = isset($test['testinfo']['latency']) ? $test['testinfo']['latency'] : null; $ttfbScore = gradeTTFBForStep($ttfb, $latency, $stepResult->createTestPaths(), $target); if (isset($ttfbScore)) { $numTTFBScores++; $sumTTFBScores += $ttfbScore; } } if ($numTTFBScores > 0) { $scores['ttfb'] = $sumTTFBScores / $numTTFBScores; } return createGradeArray($scores); }
require_once 'waterfall.inc'; require_once __DIR__ . '/include/TestInfo.php'; require_once __DIR__ . '/include/TestRunResults.php'; require_once __DIR__ . '/include/RunResultHtmlTable.php'; require_once __DIR__ . '/include/UserTimingHtmlTable.php'; require_once __DIR__ . '/include/WaterfallViewHtmlSnippet.php'; require_once __DIR__ . '/include/ConnectionViewHtmlSnippet.php'; require_once __DIR__ . '/include/RequestDetailsHtmlSnippet.php'; require_once __DIR__ . '/include/RequestHeadersHtmlSnippet.php'; require_once __DIR__ . '/include/AccordionHtmlHelper.php'; $options = null; if (array_key_exists('end', $_REQUEST)) { $options = array('end' => $_REQUEST['end']); } $testInfo = TestInfo::fromFiles($testPath); $testRunResults = TestRunResults::fromFiles($testInfo, $run, $cached, null, $options); $data = loadPageRunData($testPath, $run, $cached, $options, $test['testinfo']); $isMultistep = $testRunResults->countSteps() > 1; $page_keywords = array('Performance Test', 'Details', 'Webpagetest', 'Website Speed Test', 'Page Speed'); $page_description = "Website performance test details{$testLabel}"; ?> <!DOCTYPE html> <html> <head> <title>WebPagetest Test Details<?php echo $testLabel; ?> </title> <?php $gaTemplate = 'Details'; include 'head.inc';
private function getSinglestepTestRunResultMock() { global $SINGLESTEP_RUN_RESULT_DATA; $mock = $this->getMockBuilder("TestStepResult")->disableOriginalConstructor()->getMock(); foreach ($SINGLESTEP_RUN_RESULT_DATA as $key => &$value) { $mock->method($key)->willReturn($value); } $mock->method("isCachedRun")->willReturn(false); $mock->method("getRunNumber")->willReturn(1); return TestRunResults::fromStepResults($this->testInfoMock, 1, false, array($mock)); }
<?php include __DIR__ . '/common.inc'; require_once __DIR__ . '/include/TestInfo.php'; require_once __DIR__ . '/include/TestRunResults.php'; require_once __DIR__ . '/optimization_detail.inc.php'; require_once __DIR__ . '/include/PerformanceOptimizationHtmlSnippet.php'; require_once __DIR__ . '/include/AccordionHtmlHelper.php'; $page_keywords = array('Optimization', 'Webpagetest', 'Website Speed Test', 'Page Speed'); $page_description = "Website performance optimization recommendations{$testLabel}."; global $testPath, $run, $cached, $step; // defined in common.inc $testInfo = TestInfo::fromFiles($testPath); $testRunResults = TestRunResults::fromFiles($testInfo, $run, $cached, $step); $isMultistep = $testRunResults->countSteps() > 1; ?> <!DOCTYPE html> <html> <head> <title>WebPagetest Optimization Check Results<?php echo $testLabel; ?> </title> <?php $gaTemplate = 'Optimization Check'; include 'head.inc'; ?> <style type="text/css"> td.nowrap {white-space:nowrap;} th.nowrap {white-space:nowrap;} tr.blank {height:2ex;}
/** * @param TestRunResults $testRunResults The run results to generate quicklinks for */ function printQuicklinks($testRunResults) { echo '<a name="quicklinks"><h1>Quicklinks</h1></a>'; echo '<div style="text-align: center;"><table class="pretty" id="quicklinks_table">'; echo '<tbody>'; for ($i = 1; $i <= $testRunResults->countSteps(); $i++) { $class = $i % 2 == 0 ? " class='even'" : ""; echo '<tr' . $class . '>'; echo '<th>' . $testRunResults->getStepResult($i)->readableIdentifier() . '</th>'; echo '<td><a href="#step_' . $i . '">Screen Shots</a></td>'; echo '</tr>'; } echo '</tbody>'; echo "</table></div>"; }
/** * @param TestRunResults $runResult Result of this run */ public function printRun($runResult) { if (empty($runResult)) { return; } $testResult = $runResult->getStepResult(1); $numSteps = $runResult->countSteps(); $this->printViewRootStartTag($testResult->isCachedRun()); $this->printTester($runResult->getRunNumber()); echo "<numSteps>" . $numSteps . "</numSteps>\n"; if ($this->forceMultistep || $numSteps > 1) { for ($step = 1; $step <= $numSteps; $step++) { $testStepResult = $runResult->getStepResult($step); $eventName = empty($testStepResult) ? "" : $testStepResult->getEventName(); echo "<step>\n"; echo "<id>" . $step . "</id>"; echo "<eventName>" . $eventName . "</eventName>"; $this->printStepResults($testStepResult); echo "</step>\n"; } } else { $this->printStepResults($runResult->getStepResult(1)); } $this->printViewRootEndTag($testResult->isCachedRun()); }