@@ -67,6 +67,7 @@ import {getAmpdoc} from '../../../src/service';
6767import { getData , listen } from '../../../src/event-helper' ;
6868import { getFriendlyIframeEmbedOptional } from '../../../src/iframe-helper' ;
6969import { getLogEntries } from './logging' ;
70+ import { getMediaPerformanceMetricsService } from './media-performance-metrics-service' ;
7071import { getMode } from '../../../src/mode' ;
7172import { htmlFor } from '../../../src/static-template' ;
7273import { isExperimentOn } from '../../../src/experiments' ;
@@ -246,6 +247,14 @@ export class AmpStoryPage extends AMP.BaseElement {
246247
247248 const deferred = new Deferred ( ) ;
248249
250+ /** @private @const {!./media-performance-metrics-service.MediaPerformanceMetricsService} */
251+ this . mediaPerformanceMetricsService_ = getMediaPerformanceMetricsService (
252+ this . win
253+ ) ;
254+
255+ /** @private {!Array<!HTMLMediaElement>} */
256+ this . performanceTrackedVideos_ = [ ] ;
257+
249258 /** @private @const {!Promise<!MediaPool>} */
250259 this . mediaPoolPromise_ = deferred . promise ;
251260
@@ -422,6 +431,7 @@ export class AmpStoryPage extends AMP.BaseElement {
422431 pauseCallback ( ) {
423432 this . advancement_ . stop ( ) ;
424433
434+ this . stopMeasuringVideoPerformance_ ( ) ;
425435 this . stopListeningToVideoEvents_ ( ) ;
426436 this . toggleErrorMessage_ ( false ) ;
427437 this . togglePlayMessage_ ( false ) ;
@@ -455,6 +465,7 @@ export class AmpStoryPage extends AMP.BaseElement {
455465 this . checkPageHasAudio_ ( ) ;
456466 this . renderOpenAttachmentUI_ ( ) ;
457467 this . findAndPrepareEmbeddedComponents_ ( ) ;
468+ this . startMeasuringVideoPerformance_ ( ) ;
458469 this . preloadAllMedia_ ( )
459470 . then ( ( ) => this . startListeningToVideoEvents_ ( ) )
460471 . then ( ( ) => this . playAllMedia_ ( ) ) ;
@@ -1258,6 +1269,41 @@ export class AmpStoryPage extends AMP.BaseElement {
12581269 } ) ;
12591270 }
12601271
1272+ /**
1273+ * Starts measuring video performance metrics, if performance tracking is on.
1274+ * Has to be called directly before playing the video.
1275+ * @private
1276+ */
1277+ startMeasuringVideoPerformance_ ( ) {
1278+ if ( ! this . mediaPerformanceMetricsService_ . isPerformanceTrackingOn ( ) ) {
1279+ return ;
1280+ }
1281+
1282+ this . performanceTrackedVideos_ = /** @type {!Array<!HTMLMediaElement> } */ ( this . getAllVideos_ ( ) ) ;
1283+ for ( let i = 0 ; i < this . performanceTrackedVideos_ . length ; i ++ ) {
1284+ this . mediaPerformanceMetricsService_ . startMeasuring (
1285+ this . performanceTrackedVideos_ [ i ]
1286+ ) ;
1287+ }
1288+ }
1289+
1290+ /**
1291+ * Stops measuring video performance metrics, if performance tracking is on.
1292+ * Computes and sends the metrics.
1293+ * @private
1294+ */
1295+ stopMeasuringVideoPerformance_ ( ) {
1296+ if ( ! this . mediaPerformanceMetricsService_ . isPerformanceTrackingOn ( ) ) {
1297+ return ;
1298+ }
1299+
1300+ for ( let i = 0 ; i < this . performanceTrackedVideos_ . length ; i ++ ) {
1301+ this . mediaPerformanceMetricsService_ . stopMeasuring (
1302+ this . performanceTrackedVideos_ [ i ]
1303+ ) ;
1304+ }
1305+ }
1306+
12611307 /**
12621308 * Displays a loading spinner whenever the video is buffering.
12631309 * Has to be called after the mediaPool preload method, that swaps the video
0 commit comments