diff options
Diffstat (limited to 'media/test/data/eme_player_js/fps_observer.js')
-rw-r--r-- | media/test/data/eme_player_js/fps_observer.js | 67 |
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_); +}; |