| // 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; |