34 sort($nanoseconds, SORT_NUMERIC);
35 $samples = count($nanoseconds);
36 if ($samples === 0) {
return ''; }
37 $middle = intdiv($samples, 2);
38 $median = $samples % 2 ? $nanoseconds[$middle] : ($nanoseconds[$middle - 1] + $nanoseconds[$middle]) / 2;
39 $p95 = $nanoseconds[(int)ceil($samples * 0.95) - 1];
40 return '<section><h2>Performance</h2><ul>'.
41 '<li>Lookups measured: '.$samples.
'</li>'.
42 sprintf(
'<li>Total test time: %.3f s</li>', $elapsed / 1e9).
43 sprintf(
'<li>Average lookup: %.3f ms</li>', array_sum($nanoseconds) / $samples / 1e6).
44 sprintf(
'<li>Median lookup: %.3f ms</li>', $median / 1e6).
45 sprintf(
'<li>95th-percentile lookup: %.3f ms</li>', $p95 / 1e6).
46 sprintf(
'<li>Slowest lookup: %.3f ms</li>', $nanoseconds[$samples - 1] / 1e6).
47 sprintf(
'<li>PHP request peak memory: %.2f MiB</li>', $peakMemory / 1048576).
48 '</ul><p>Lookup timings include configuration loading, authentication, the database connection, and the query. '.
49 'They exclude HTTP transport and browser rendering. Peak memory includes this PHP request and its test results; '.
50 'database server memory is outside this measurement.</p></section>';
60 $started = hrtime(
true);
67 function _testllGen($inLng,
72 $queryString = isset($g_server_secret) ?
"secret=$g_server_secret" :
"";
74 if (isset($inLng) && isset($inLat)) {
90 function _callTestServer( $inTitle,
100 $lookupStarted = hrtime(
true);
102 $duration = hrtime(
true) - $lookupStarted;
103 $timings[] = $duration;
104 $style = $result == $inResult ?
"pass" :
"fail";
106 if ($result != $inResult) {
107 $failure = [
'title' => $inTitle,
'id' =>
"test-$count"];
109 $failAddendum =
' <em class="fail">(Expected "'.htmlspecialchars($inResult).
'")</em>';
111 $ret =
"<strong class=\"$style\" id=\"test-$count\">$inTitle</strong>";
112 $ret .=
"<ul><li>Longitude: $inLng</li><li>Latitude: $inLat</li>";
113 $ret .=
"<li>Result: "$result"$failAddendum</li>";
114 $ret .= sprintf(
'<li>Lookup time: %.3f ms</li></ul>', $duration / 1e6);
126 include __DIR__.
'/TestLocations.php';
129 $orig_longitude = isset($test[
'params'][
'lng']) ? $test[
'params'][
'lng'] : NULL;
130 $orig_latitude = isset($test[
'params'][
'lat']) ? $test[
'params'][
'lat'] : NULL;
132 $ret .= _callTestServer($test[
'title'], $orig_longitude, $orig_latitude, $test[
'result'], $timings);
136 $failureText =
'<h2 class="fail">'.count(
$failures).
' Test Failures!</h2><ul>';
138 $failureText .=
'<li><a href="#'.$failure[
'id'].
'">'.htmlspecialchars($failure[
'title']).
'</a></li>';
140 $failureText .=
"</ul>";
142 $ret = $failureText.$ret;
144 $ret =
'<h2 class="pass">All Tests ('.$count.
') Passed!</h2>'.$ret;
147 return $ret.test_server_performance($timings, hrtime(
true) - $started, memory_get_peak_usage(
true));