// Copyright (c) 2012 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.
/**
* @fileoverview
* Module to support debug overlay window with connection stats.
*/
'use strict';
/** @suppress {duplicate} */
var remoting = remoting || {};
/**
* @constructor
* @param {Element} statsElement The HTML div to which to update stats.
*/
remoting.ConnectionStats = function(statsElement) {
this.statsElement = statsElement;
};
/**
* Show or hide the connection stats div.
*/
remoting.ConnectionStats.prototype.toggle = function() {
this.statsElement.hidden = !this.statsElement.hidden;
};
/**
* Update the statistics panel.
* @param {remoting.ClientSession.PerfStats} stats The connection statistics.
*/
remoting.ConnectionStats.prototype.update = function(stats) {
var units = '';
var videoBandwidth = stats.videoBandwidth;
if (videoBandwidth != undefined) {
if (videoBandwidth < 1024) {
units = 'Bps';
} else if (videoBandwidth < 1048576) {
units = 'KiBps';
videoBandwidth = videoBandwidth / 1024;
} else if (videoBandwidth < 1073741824) {
units = 'MiBps';
videoBandwidth = videoBandwidth / 1048576;
} else {
units = 'GiBps';
videoBandwidth = videoBandwidth / 1073741824;
}
}
/**
* @param {number} value
* @param {string} units
* @returns {string} Formatted number.
*/
function formatStatNumber(value, units) {
if (value != undefined) {
return value.toFixed(2) + ' ' + units;
} else {
return "n/a";
}
}
var statistics = document.getElementById('statistics');
this.statsElement.innerText = (
'Bandwidth: ' + formatStatNumber(videoBandwidth, units) +
', Frame Rate: ' + formatStatNumber(stats.videoFrameRate, 'fps') +
', Capture: ' + formatStatNumber(stats.captureLatency, 'ms') +
', Encode: ' + formatStatNumber(stats.encodeLatency, 'ms') +
', Decode: ' + formatStatNumber(stats.decodeLatency, 'ms') +
', Render: ' + formatStatNumber(stats.renderLatency, 'ms') +
', Latency: ' + formatStatNumber(stats.roundtripLatency, 'ms'));
};
/**
* Check for the debug toggle hot-key.
*
* @param {Event} event The keyboard event.
* @return {void} Nothing.
*/
remoting.ConnectionStats.onKeydown = function(event) {
var element = /** @type {Element} */ (event.target);
if (element.tagName == 'INPUT' || element.tagName == 'TEXTAREA') {
return;
}
if (String.fromCharCode(event.which) == 'D') {
remoting.stats.toggle();
}
};
/** @type {remoting.ConnectionStats} */
remoting.stats = null;