4 <title>VNC Performance Benchmark
</title>
8 Passes:
<input id='passes' style='width:
50' value=
3>
10 <input id='startButton' type='button' value='Start' style='width:
100px'
11 onclick=
"do_test();" disabled
>
16 <textarea id=
"messages" style=
"font-size: 9;" cols=
80 rows=
15></textarea>
21 <div id=
"VNC_status_bar" class=
"VNC_status_bar" style=
"margin-top: 0px;">
22 <table border=
0 width=
100%
><tr>
23 <td><div id=
"VNC_status">Loading
</div></td>
26 <canvas id=
"VNC_canvas" width=
"640px" height=
"20px">
34 <script type='text/javascript'
35 src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script>
38 <script type=
"text/javascript">
39 var INCLUDE_URI=
"../";
41 <script src=
"../core/util.js"></script>
42 <script src=
"../app/webutil.js"></script>
45 var fname = WebUtil.getQueryVar('data', null);
47 msg(
"Loading " + fname);
49 // Load supporting scripts
50 WebUtil.load_scripts({
51 'core': [
"base64.js",
"websock.js",
"des.js",
"input/keysym.js",
52 "input/keysymdef.js",
"input/xtscancodes.js",
"input/util.js",
53 "input/devices.js",
"display.js",
"rfb.js",
"inflator.js",
54 "input/vkeys.js",
"input/fixedkeys.js"],
55 'tests': [
"playback.js"],
56 'recordings': [fname]});
58 msg(
"Must specifiy data=FOO.js in query string.");
61 var start_time, VNC_frame_data, pass, passes, encIdx,
62 encOrder = ['raw', 'rre', 'hextile', 'tightpng', 'copyrect'],
63 encTot = {}, encMin = {}, encMax = {},
64 passCur, passTot, passMin, passMax;
68 var cell = document.getElementById('messages');
69 cell.textContent += str +
"\n";
70 cell.scrollTop = cell.scrollHeight;
72 function dbgmsg(str) {
73 if (Util.get_logging() === 'debug') {
78 disconnected = function (rfb, reason) {
80 msg(
"noVNC sent '" + state +
81 "' state during pass " + pass +
82 ", iteration " + iteration +
83 " frame " + frame_idx);
84 test_state = 'failed';
88 notification = function (rfb, mesg, level, options) {
89 document.getElementById('VNC_status').textContent = mesg;
93 document.getElementById('startButton').value =
"Running";
94 document.getElementById('startButton').disabled = true;
96 mode = 'perftest'; // full-speed
97 passes = document.getElementById('passes').value;
101 // Render each encoding once for each pass
104 // Initialize stats counters
105 for (i =
0; i < encOrder.length; i++) {
108 encMin[i] =
2<
<23; // Something sufficiently large
120 function next_encoding() {
123 if (encIdx
>= encOrder.length) {
124 // Accumulate pass stats
125 if (passCur < passMin) {
128 if (passCur
> passMax) {
131 msg(
"Pass " + pass +
" took " + passCur +
" ms");
138 // Shut-off event interception
139 rfb.get_mouse().ungrab();
140 rfb.get_keyboard().ungrab();
141 document.getElementById('startButton').disabled = false;
142 document.getElementById('startButton').value =
"Start";
144 return; // We are finished, terminate
148 encName = encOrder[encIdx];
149 dbgmsg(
"Rendering pass " + pass +
" encoding '" + encName +
"'");
151 VNC_frame_data = VNC_frame_data_multi[encName];
153 start_time = (new Date()).getTime();
158 // Finished rendering current encoding
160 var total_time, end_time = (new Date()).getTime();
161 total_time = end_time - start_time;
163 dbgmsg(
"Encoding " + encOrder[encIdx] +
" took " + total_time +
"ms");
165 passCur += total_time;
166 passTot += total_time;
169 encTot[encIdx] += total_time;
170 if (total_time < encMin[encIdx]) {
171 encMin[encIdx] = total_time;
173 if (total_time
> encMax[encIdx]) {
174 encMax[encIdx] = total_time;
181 function finish_passes() {
182 var i, enc, avg, passAvg;
183 msg(
"STATS (for " + passes +
" passes)");
185 for (i =
0; i < encOrder.length; i++) {
187 avg = (encTot[i] / passes).toFixed(
1);
188 msg(
" " + enc +
": " + encTot[i] +
" ms, " +
189 encMin[i] +
"/" + avg +
"/" + encMax[i] +
194 passAvg = (passTot / passes).toFixed(
1);
195 msg(
"\n All passes: " + passTot +
" ms, " +
196 passMin +
"/" + passAvg +
"/" + passMax +
200 window.onscriptsload = function() {
202 dbgmsg(
"Frame lengths:");
203 for (i =
0; i < encOrder.length; i++) {
205 dbgmsg(
" " + enc +
": " + VNC_frame_data_multi[enc].length);
207 document.getElementById('startButton').disabled = false;