Skip to content

Commit

Permalink
Calculate and report variance in performance results
Browse files Browse the repository at this point in the history
  • Loading branch information
jsnajdr committed Apr 22, 2024
1 parent 857cc26 commit c024213
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 11 deletions.
62 changes: 51 additions & 11 deletions test/performance/config/performance-reporter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import type {
/**
* Internal dependencies
*/
import { average, median, minimum, maximum, round } from '../utils';
import { average, variance, round } from '../utils';

export interface WPRawPerformanceResults {
timeToFirstByte: number[];
Expand All @@ -40,25 +40,45 @@ export interface WPRawPerformanceResults {

export interface WPPerformanceResults {
timeToFirstByte?: number;
timeToFirstByteV?: number;
largestContentfulPaint?: number;
largestContentfulPaintV?: number;
lcpMinusTtfb?: number;
lcpMinusTtfbV?: number;
serverResponse?: number;
serverResponseV?: number;
firstPaint?: number;
firstPaintV?: number;
domContentLoaded?: number;
domContentLoadedV?: number;
loaded?: number;
loadedV?: number;
firstContentfulPaint?: number;
firstContentfulPaintV?: number;
firstBlock?: number;
firstBlockV?: number;
type?: number;
typeV?: number;
typeWithoutInspector?: number;
typeWithoutInspectorV?: number;
typeWithTopToolbar?: number;
typeWithTopToolbarV?: number;
typeContainer?: number;
typeContainerV?: number;
focus?: number;
focusV?: number;
inserterOpen?: number;
inserterOpenV?: number;
inserterSearch?: number;
inserterSearchV?: number;
inserterHover?: number;
inserterHoverV?: number;
loadPatterns?: number;
loadPatternsV?: number;
listViewOpen?: number;
listViewOpenV?: number;
navigate?: number;
navigateV?: number;
}

/**
Expand All @@ -72,26 +92,46 @@ export function curateResults(
results: WPRawPerformanceResults
): WPPerformanceResults {
const output = {
timeToFirstByte: median( results.timeToFirstByte ),
largestContentfulPaint: median( results.largestContentfulPaint ),
lcpMinusTtfb: median( results.lcpMinusTtfb ),
serverResponse: median( results.serverResponse ),
firstPaint: median( results.firstPaint ),
domContentLoaded: median( results.domContentLoaded ),
loaded: median( results.loaded ),
firstContentfulPaint: median( results.firstContentfulPaint ),
firstBlock: median( results.firstBlock ),
timeToFirstByte: average( results.timeToFirstByte ),
timeToFirstByteV: variance( results.timeToFirstByte ),
largestContentfulPaint: average( results.largestContentfulPaint ),
largestContentfulPaintV: variance( results.largestContentfulPaint ),
lcpMinusTtfb: average( results.lcpMinusTtfb ),
lcpMinusTtfbV: variance( results.lcpMinusTtfb ),
serverResponse: average( results.serverResponse ),
serverResponseV: variance( results.serverResponse ),
firstPaint: average( results.firstPaint ),
firstPaintV: variance( results.firstPaint ),
domContentLoaded: average( results.domContentLoaded ),
domContentLoadedV: variance( results.domContentLoaded ),
loaded: average( results.loaded ),
loadedV: variance( results.loaded ),
firstContentfulPaint: average( results.firstContentfulPaint ),
firstContentfulPaintV: variance( results.firstContentfulPaint ),
firstBlock: average( results.firstBlock ),
firstBlockV: variance( results.firstBlock ),
type: average( results.type ),
typeV: variance( results.type ),
typeWithoutInspector: average( results.typeWithoutInspector ),
typeWithoutInspectorV: variance( results.typeWithoutInspector ),
typeWithTopToolbar: average( results.typeWithTopToolbar ),
typeWithTopToolbarV: variance( results.typeWithTopToolbar ),
typeContainer: average( results.typeContainer ),
typeContainerV: variance( results.typeContainer ),
focus: average( results.focus ),
focusV: variance( results.focus ),
inserterOpen: average( results.inserterOpen ),
inserterOpenV: variance( results.inserterOpen ),
inserterSearch: average( results.inserterSearch ),
inserterSearchV: variance( results.inserterSearch ),
inserterHover: average( results.inserterHover ),
inserterHoverV: variance( results.inserterHover ),
loadPatterns: average( results.loadPatterns ),
loadPatternsV: variance( results.loadPatterns ),
listViewOpen: average( results.listViewOpen ),
navigate: median( results.navigate ),
listViewOpenV: variance( results.listViewOpen ),
navigate: average( results.navigate ),
navigateV: variance( results.navigate ),
};

return (
Expand Down
9 changes: 9 additions & 0 deletions test/performance/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,15 @@ export function average( array ) {
return sum( array ) / array.length;
}

export function variance( array ) {
if ( ! array || ! array.length ) return undefined;

return Math.sqrt(
sum( array.map( ( x ) => x ** 2 ) ) / array.length -
( sum( array ) / array.length ) ** 2
);
}

export function median( array ) {
if ( ! array || ! array.length ) return undefined;

Expand Down

0 comments on commit c024213

Please sign in to comment.