summaryrefslogtreecommitdiffstats
path: root/media/test/data/eme_player_js/fps_observer.js
diff options
context:
space:
mode:
Diffstat (limited to 'media/test/data/eme_player_js/fps_observer.js')
-rw-r--r--media/test/data/eme_player_js/fps_observer.js67
1 files changed, 67 insertions, 0 deletions
diff --git a/media/test/data/eme_player_js/fps_observer.js b/media/test/data/eme_player_js/fps_observer.js
new file mode 100644
index 0000000..8226df8
--- /dev/null
+++ b/media/test/data/eme_player_js/fps_observer.js
@@ -0,0 +1,67 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// FPSObserver observes a <video> and reports decoded FPS, dropped FPS, and
+// total dropped frames during the video playback.
+var FPSObserver = new function() {
+ this.video_ = null;
+ this.decodedFrames_ = 0;
+ this.droppedFrames_ = 0;
+ this.startTime_ = 0;
+ this.intID_ = null;
+}
+
+FPSObserver.observe = function(video) {
+ this.video_ = video;
+ var observer = this;
+ this.video_.addEventListener('playing', function() {
+ observer.onVideoPlaying();
+ });
+
+ this.video_.addEventListener('error', function() {
+ observer.endTest();
+ });
+
+ this.video_.addEventListener('ended', function() {
+ observer.endTest();
+ });
+};
+
+FPSObserver.onVideoPlaying = function() {
+ this.decodedFrames_ = 0;
+ this.droppedFrames_ = 0;
+ this.startTime_ = window.performance.now();
+ this.endTest(true);
+ var observer = this;
+ this.intID_ = window.setInterval(function() {
+ observer.calculateStats();}, 1000);
+};
+
+FPSObserver.calculateStats = function() {
+ if (this.video_.readyState <= HTMLMediaElement.HAVE_CURRENT_DATA ||
+ this.video_.paused || this.video_.ended)
+ return;
+ var currentTime = window.performance.now();
+ var deltaTime = (currentTime - this.startTime_) / 1000;
+ this.startTime_ = currentTime;
+
+ // Calculate decoded frames per sec.
+ var fps = (this.video_.webkitDecodedFrameCount - this.decodedFrames_) /
+ deltaTime;
+ this.decodedFrames_ = this.video_.webkitDecodedFrameCount;
+ fps = fps.toFixed(2);
+ decodedFPSElement.innerHTML = fps;
+
+ // Calculate dropped frames per sec.
+ fps = (this.video_.webkitDroppedFrameCount - this.droppedFrames_) / deltaTime;
+ this.droppedFrames_ = this.video_.webkitDroppedFrameCount;
+ fps = fps.toFixed(2);
+ droppedFPSElement.innerHTML = fps;
+
+ droppedFramesElement.innerHTML = this.droppedFrames_;
+};
+
+FPSObserver.endTest = function() {
+ window.clearInterval(this.intID_);
+};