Roll leveldb 3f7758:803d69 (v1.17 -> v1.18)
[chromium-blink-merge.git] / media / test / data / eme_player_js / fps_observer.js
blob8226df8bee1db87c3e39c5a105d5b10a74c3a81c
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 // FPSObserver observes a <video> and reports decoded FPS, dropped FPS, and
6 // total dropped frames during the video playback.
7 var FPSObserver = new function() {
8   this.video_ = null;
9   this.decodedFrames_ = 0;
10   this.droppedFrames_ = 0;
11   this.startTime_ = 0;
12   this.intID_ = null;
15 FPSObserver.observe = function(video) {
16   this.video_ = video;
17   var observer = this;
18   this.video_.addEventListener('playing', function() {
19     observer.onVideoPlaying();
20   });
22   this.video_.addEventListener('error', function() {
23     observer.endTest();
24   });
26   this.video_.addEventListener('ended', function() {
27     observer.endTest();
28   });
31 FPSObserver.onVideoPlaying = function() {
32   this.decodedFrames_ = 0;
33   this.droppedFrames_ = 0;
34   this.startTime_ = window.performance.now();
35   this.endTest(true);
36   var observer = this;
37   this.intID_ = window.setInterval(function() {
38       observer.calculateStats();}, 1000);
41 FPSObserver.calculateStats = function() {
42   if (this.video_.readyState <= HTMLMediaElement.HAVE_CURRENT_DATA ||
43       this.video_.paused || this.video_.ended)
44     return;
45   var currentTime = window.performance.now();
46   var deltaTime = (currentTime - this.startTime_) / 1000;
47   this.startTime_ = currentTime;
49   // Calculate decoded frames per sec.
50   var fps = (this.video_.webkitDecodedFrameCount - this.decodedFrames_) /
51              deltaTime;
52   this.decodedFrames_ = this.video_.webkitDecodedFrameCount;
53   fps = fps.toFixed(2);
54   decodedFPSElement.innerHTML = fps;
56   // Calculate dropped frames per sec.
57   fps = (this.video_.webkitDroppedFrameCount - this.droppedFrames_) / deltaTime;
58   this.droppedFrames_ = this.video_.webkitDroppedFrameCount;
59   fps = fps.toFixed(2);
60   droppedFPSElement.innerHTML = fps;
62   droppedFramesElement.innerHTML = this.droppedFrames_;
65 FPSObserver.endTest = function() {
66   window.clearInterval(this.intID_);