diff --git a/test/performance/config/performance-reporter.ts b/test/performance/config/performance-reporter.ts index c82c092f304788..3979966e35e2f4 100644 --- a/test/performance/config/performance-reporter.ts +++ b/test/performance/config/performance-reporter.ts @@ -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[]; @@ -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; } /** @@ -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 ( diff --git a/test/performance/utils.js b/test/performance/utils.js index e14ff71436d735..8bb9c3c66405f2 100644 --- a/test/performance/utils.js +++ b/test/performance/utils.js @@ -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;