3 <title>VNC Performance Benchmark
</title>
4 <link rel=
"stylesheet" href=
"include/plain.css">
8 Passes:
<input id='passes' style='width:
50' value=
3>
10 <input id='startButton' type='button' value='Start' style='width:
100px'
11 onclick=
"start();" 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 src=
"include/vnc.js"></script>
39 <script src=
"include/playback.js"></script>
40 <script src=
"data_multi.js"></script>
43 var start_time, VNC_frame_data, pass, passes, encIdx,
44 encOrder = ['raw', 'rre', 'hextile', 'tightpng', 'copyrect'],
45 encTot = {}, encMin = {}, encMax = {},
46 passCur, passTot, passMin, passMax;
50 var cell = $('messages');
51 cell.innerHTML += str +
"\n";
52 cell.scrollTop = cell.scrollHeight;
54 function dbgmsg(str) {
55 if (Util.get_logging() === 'debug') {
60 updateState = function (rfb, state, oldstate, mesg) {
64 msg(
"noVNC sent '" + state +
65 "' state during pass " + pass +
66 ", iteration " + iteration +
67 " frame " + frame_idx);
68 test_state = 'failed';
71 $('startButton').disabled = false;
74 if (typeof mesg !== 'undefined') {
75 $('VNC_status').innerHTML = mesg;
80 $('startButton').value =
"Running";
81 $('startButton').disabled = true;
83 mode = 'perftest'; // full-speed
84 passes = $('passes').value;
88 // Render each encoding once for each pass
91 // Initialize stats counters
92 for (i =
0; i < encOrder.length; i++) {
95 encMin[i] =
2<
<23; // Something sufficiently large
107 function next_encoding() {
110 if (encIdx
>= encOrder.length) {
111 // Accumulate pass stats
112 if (passCur < passMin) {
115 if (passCur
> passMax) {
118 msg(
"Pass " + pass +
" took " + passCur +
" ms");
125 rfb.get_canvas().stop(); // Shut-off event interception
126 $('startButton').disabled = false;
127 $('startButton').value =
"Start";
129 return; // We are finished, terminate
133 encName = encOrder[encIdx];
134 dbgmsg(
"Rendering pass " + pass +
" encoding '" + encName +
"'");
136 VNC_frame_data = VNC_frame_data_multi[encName];
138 start_time = (new Date()).getTime();
143 // Finished rendering current encoding
145 var total_time, end_time = (new Date()).getTime();
146 total_time = end_time - start_time;
148 dbgmsg(
"Encoding " + encOrder[encIdx] +
" took " + total_time +
"ms");
150 passCur += total_time;
151 passTot += total_time;
154 encTot[encIdx] += total_time;
155 if (total_time < encMin[encIdx]) {
156 encMin[encIdx] = total_time;
158 if (total_time
> encMax[encIdx]) {
159 encMax[encIdx] = total_time;
166 function finish_passes() {
167 var i, enc, avg, passAvg;
168 msg(
"STATS (for " + passes +
" passes)");
170 for (i =
0; i < encOrder.length; i++) {
172 avg = (encTot[i] / passes).toFixed(
1);
173 msg(
" " + enc +
": " + encTot[i] +
" ms, " +
174 encMin[i] +
"/" + avg +
"/" + encMax[i] +
179 passAvg = (passTot / passes).toFixed(
1);
180 msg(
"\n All passes: " + passTot +
" ms, " +
181 passMin +
"/" + passAvg +
"/" + passMax +
185 window.onload = function() {
187 dbgmsg(
"Frame lengths:");
188 for (i =
0; i < encOrder.length; i++) {
190 dbgmsg(
" " + enc +
": " + VNC_frame_data_multi[enc].length);
192 rfb = RFB({'target': 'VNC_canvas',
193 'updateState': updateState});
194 rfb.testMode(send_array);