@@ -5,6 +5,8 @@ const galleryEl = document.querySelector(".gallery");
5
5
const filterEl = document . querySelector ( ".filters" ) ;
6
6
const filesEl = document . querySelector ( '.files' ) ;
7
7
8
+ const customPerformanceTrackGroupName = "Custom performance timings" ;
9
+
8
10
function formatDate ( data ) {
9
11
const date = new Date ( data . DateTime . substring ( 0 , 10 ) . replace ( / : / g, '/' ) ) ;
10
12
return date . toLocaleDateString ( ) ;
@@ -175,6 +177,8 @@ function populateGallery(images) {
175
177
galleryEl . innerHTML = '' ;
176
178
177
179
images . forEach ( ( { file, user, description, w, h, meta } ) => {
180
+ const imageCreationStart = performance . now ( ) ;
181
+
178
182
const liEl = document . createElement ( "li" ) ;
179
183
liEl . classList . add ( 'photo' ) ;
180
184
liEl . setAttribute ( 'tabindex' , '0' ) ;
@@ -215,12 +219,12 @@ function populateGallery(images) {
215
219
216
220
const beforeShadowEl = document . createElement ( "div" ) ;
217
221
beforeShadowEl . classList . add ( 'before-shadow' ) ;
218
- beforeShadowEl . style = `width:${ w } px;left:${ ( 300 - w ) / 2 } px;` ;
222
+ beforeShadowEl . style = `width:${ w } px;left:${ ( 300 - w ) / 2 } px;` ;
219
223
photoWrapperEl . appendChild ( beforeShadowEl ) ;
220
-
224
+
221
225
const afterShadowEl = document . createElement ( "div" ) ;
222
226
afterShadowEl . classList . add ( 'after-shadow' ) ;
223
- afterShadowEl . style = `width:${ w } px;left:${ ( 300 - w ) / 2 } px;bottom:0;` ;
227
+ afterShadowEl . style = `width:${ w } px;left:${ ( 300 - w ) / 2 } px;bottom:0;` ;
224
228
photoWrapperEl . appendChild ( afterShadowEl ) ;
225
229
226
230
const imageEl = document . createElement ( "img" ) ;
@@ -287,6 +291,27 @@ function populateGallery(images) {
287
291
metaEl . querySelector ( '.exposure strong' ) . textContent = formatExposureTime ( meta ) ;
288
292
metaEl . querySelector ( '.focal-length strong' ) . textContent = formatFocalLength ( meta ) ;
289
293
metaEl . querySelector ( '.iso strong' ) . textContent = formatISO ( meta ) ;
294
+
295
+ const perfMeasureDescription = `Image ${ file } created` ;
296
+ performance . measure ( perfMeasureDescription , {
297
+ start : imageCreationStart ,
298
+ end : performance . now ( ) ,
299
+ detail : {
300
+ devtools : {
301
+ dataType : "track-entry" ,
302
+ color : "primary" ,
303
+ trackGroup : customPerformanceTrackGroupName ,
304
+ track : "Photo creation" ,
305
+ properties : [
306
+ [ 'File' , file ] ,
307
+ [ 'Width' , w ] ,
308
+ [ 'Height' , h ] ,
309
+ [ 'User' , user ] ,
310
+ ] ,
311
+ tooltipText : perfMeasureDescription
312
+ }
313
+ } ,
314
+ } ) ;
290
315
} ) ;
291
316
}
292
317
@@ -301,6 +326,8 @@ getImageData().then(imageData => {
301
326
addEventListener ( 'input' , e => {
302
327
const filter = e . target . closest ( '.filter select' ) ;
303
328
if ( filter ) {
329
+ const filterStartTime = performance . now ( ) ;
330
+
304
331
// Reset the other filters
305
332
filterEl . querySelectorAll ( '.filter select' ) . forEach ( select => {
306
333
if ( select !== filter ) {
@@ -325,6 +352,24 @@ addEventListener('input', e => {
325
352
filterByISO ( filter . value ) ;
326
353
break ;
327
354
}
355
+
356
+ const description = `Filter applied: ${ filter . id } ` ;
357
+ performance . measure ( description , {
358
+ start : filterStartTime ,
359
+ end : performance . now ( ) ,
360
+ detail : {
361
+ devtools : {
362
+ dataType : "track-entry" ,
363
+ color : "secondary" ,
364
+ trackGroup : customPerformanceTrackGroupName ,
365
+ track : "Filtering" ,
366
+ properties : [
367
+ [ 'Filter Value' , filter . value ]
368
+ ] ,
369
+ tooltipText : description
370
+ }
371
+ } ,
372
+ } ) ;
328
373
}
329
374
} ) ;
330
375
@@ -366,10 +411,30 @@ addEventListener('keydown', e => {
366
411
} ) ;
367
412
368
413
function loadPhoto ( fileName ) {
414
+ const loadStartTime = performance . now ( ) ;
415
+ const perfMeasureDescription = `Loading photo: ${ fileName } ` ;
416
+
369
417
return new Promise ( resolve => {
370
418
const imageEl = document . createElement ( "img" ) ;
371
419
imageEl . src = fileName ;
372
420
imageEl . addEventListener ( 'load' , ( ) => {
421
+ performance . measure ( perfMeasureDescription , {
422
+ start : loadStartTime ,
423
+ end : performance . now ( ) ,
424
+ detail : {
425
+ devtools : {
426
+ dataType : "track-entry" ,
427
+ color : "tertiary" ,
428
+ trackGroup : customPerformanceTrackGroupName ,
429
+ track : "Loading" ,
430
+ properties : [
431
+ [ 'Photo' , fileName ]
432
+ ] ,
433
+ tooltipText : perfMeasureDescription
434
+ }
435
+ } ,
436
+ } ) ;
437
+
373
438
resolve ( imageEl ) ;
374
439
} , { once : true } ) ;
375
440
} ) ;
0 commit comments