@@ -23,6 +23,10 @@ import {
2323} from '../lib/layout/geometry/index.js' ;
2424import { calculateStatistics } from '../tasks/benchmark-util.mjs' ;
2525import { writeInspectorReport } from './inspector/Report.js' ;
26+ import {
27+ INSPECTOR_LAYOUT_TIMING_RUNS ,
28+ shouldMeasureLayoutTimings
29+ } from './inspector/Timing.js' ;
2630import {
2731 EXTERNAL_LABEL_CLEARANCE ,
2832 EXPANDED_SUBPROCESS_ANNOTATION_CLEARANCE ,
@@ -46,9 +50,9 @@ const snapshotsDirectory = path.join(__dirname, 'snapshots');
4650const metricsBaselineFile = path . join ( __dirname , 'metrics' , 'baseline.json' ) ;
4751
4852const UPDATE_SNAPSHOTS = process . env . UPDATE_SNAPSHOTS === 'true' ;
49- const INSPECTOR_LAYOUT_TIMING_RUNS = 5 ;
5053const layoutTimingsByFixture = new Map ( ) ;
5154const layoutWarningsByFixture = new Map ( ) ;
55+ const MEASURE_INSPECTOR_TIMINGS = shouldMeasureLayoutTimings ( ) ;
5256
5357async function layoutProcess ( xml ) {
5458 return ( await layoutProcessResult ( xml ) ) . xml ;
@@ -3245,32 +3249,23 @@ describe('Layout', function() {
32453249 const xml = fs . readFileSync ( path . join ( fixturesDirectory , fileName ) , 'utf8' ) ;
32463250
32473251 // when
3248- await layoutProcessResult ( xml ) ;
3249-
3250- const timings = [ ] ;
3251- let output ;
3252- let warnings ;
3253-
3254- for ( let index = 0 ; index < INSPECTOR_LAYOUT_TIMING_RUNS ; index ++ ) {
3255- const startedAt = performance . now ( ) ;
3256- const result = await layoutProcessResult ( xml ) ;
3257-
3258- timings . push ( performance . now ( ) - startedAt ) ;
3259-
3260- if ( index === 0 ) {
3261- output = result . xml ;
3262- warnings = result . warnings ;
3263- }
3264- }
3252+ const result = await layoutProcessResult ( xml ) ;
3253+ const output = result . xml ;
32653254
3266- layoutTimingsByFixture . set ( fileName , timings ) ;
3267- layoutWarningsByFixture . set ( fileName , warnings . map ( warning => ( {
3255+ layoutWarningsByFixture . set ( fileName , result . warnings . map ( warning => ( {
32683256 code : warning . code ,
32693257 elementId : warning . elementId ,
32703258 message : warning . message ,
32713259 relatedElementIds : warning . relatedElementIds
32723260 } ) ) ) ;
32733261
3262+ if ( MEASURE_INSPECTOR_TIMINGS ) {
3263+ layoutTimingsByFixture . set (
3264+ fileName ,
3265+ await measureLayoutTimings ( xml )
3266+ ) ;
3267+ }
3268+
32743269 fs . writeFileSync ( path . join ( outputDirectory , fileName ) , output , 'utf8' ) ;
32753270
32763271 if ( UPDATE_SNAPSHOTS ) {
@@ -3335,21 +3330,23 @@ describe('Layout', function() {
33353330 assert . ok ( index . includes ( 'createMetricsPanel' ) ) ;
33363331 assert . ok ( index . includes ( 'createLayoutTiming' ) ) ;
33373332 assert . ok ( index . includes ( 'createWarningsPanel' ) ) ;
3338- assert . ok ( results . every ( result => {
3339- return Number . isFinite ( result . layoutTiming ?. averageMs ) &&
3340- result . layoutTiming . averageMs >= 0 &&
3341- Number . isFinite ( result . layoutTiming . p50Ms ) &&
3342- result . layoutTiming . p50Ms >= 0 &&
3343- Number . isFinite ( result . layoutTiming . p90Ms ) &&
3344- result . layoutTiming . p90Ms >= 0 &&
3345- result . layoutTiming . runs === INSPECTOR_LAYOUT_TIMING_RUNS ;
3346- } ) ) ;
3347- assert . deepStrictEqual (
3348- results
3349- . map ( result => result . layoutTiming . rank )
3350- . sort ( ( first , second ) => first - second ) ,
3351- results . map ( ( result , index ) => index + 1 )
3352- ) ;
3333+ if ( MEASURE_INSPECTOR_TIMINGS ) {
3334+ assert . ok ( results . every ( result => {
3335+ return Number . isFinite ( result . layoutTiming ?. averageMs ) &&
3336+ result . layoutTiming . averageMs >= 0 &&
3337+ Number . isFinite ( result . layoutTiming . p50Ms ) &&
3338+ result . layoutTiming . p50Ms >= 0 &&
3339+ Number . isFinite ( result . layoutTiming . p90Ms ) &&
3340+ result . layoutTiming . p90Ms >= 0 &&
3341+ result . layoutTiming . runs === INSPECTOR_LAYOUT_TIMING_RUNS ;
3342+ } ) ) ;
3343+ assert . deepStrictEqual (
3344+ results
3345+ . map ( result => result . layoutTiming . rank )
3346+ . sort ( ( first , second ) => first - second ) ,
3347+ results . map ( ( result , index ) => index + 1 )
3348+ ) ;
3349+ }
33533350 const groupWarningFixture = results . find ( result => {
33543351 return result . name === 'artifact.group-without-members.bpmn' ;
33553352 } ) ;
@@ -3428,6 +3425,21 @@ function iit(fileName) {
34283425 return it ;
34293426}
34303427
3428+ async function measureLayoutTimings ( xml ) {
3429+ await layoutProcessResult ( xml ) ;
3430+
3431+ const timings = [ ] ;
3432+
3433+ for ( let index = 0 ; index < INSPECTOR_LAYOUT_TIMING_RUNS ; index ++ ) {
3434+ const startedAt = performance . now ( ) ;
3435+
3436+ await layoutProcessResult ( xml ) ;
3437+ timings . push ( performance . now ( ) - startedAt ) ;
3438+ }
3439+
3440+ return timings ;
3441+ }
3442+
34313443function summarizeLayoutTimings ( timingsByFixture ) {
34323444 const timings = [ ...timingsByFixture . entries ( ) ] . map ( ( [ fileName , durations ] ) => {
34333445 return [ fileName , calculateStatistics ( durations ) ] ;
0 commit comments