Clean up unused files in tests
There were quite a few old/irrelevant files in `tests/`. This commit removes them.
This commit is contained in:
parent
ae510306b5
commit
a62b1b352a
|
@ -1,39 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Javascript Arrays Performance Test</title>
|
||||
<!--
|
||||
<script type='text/javascript'
|
||||
src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script>
|
||||
-->
|
||||
<script src="../include/util.js"></script>
|
||||
<script src="../include/webutil.js"></script>
|
||||
<script src="browser.js"></script>
|
||||
<script src="stats.js"></script>
|
||||
<script src="arrays.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<h3>Javascript Arrays Performance Test</h3>
|
||||
Iterations: <input id='iterations' style='width:50'>
|
||||
Array Size: <input id='arraySize' style='width:40'>*1024
|
||||
|
||||
<input id='startButton' type='button' value='Run Tests'
|
||||
onclick="begin();">
|
||||
|
||||
<br><br>
|
||||
Results:<br>
|
||||
<textarea id="messages" style="font-size: 9;" cols=80 rows=50></textarea>
|
||||
</br>
|
||||
<canvas id="canvas" style="display: none;"></canvas>
|
||||
|
||||
</body>
|
||||
|
||||
<script>
|
||||
var verbose = true;
|
||||
window.onload = function() {
|
||||
vmessage("in onload");
|
||||
init();
|
||||
|
||||
}
|
||||
</script>
|
||||
</html>
|
375
tests/arrays.js
375
tests/arrays.js
|
@ -1,375 +0,0 @@
|
|||
/*
|
||||
* Javascript binary array performance tests
|
||||
* Copyright (C) 2012 Joel Martin
|
||||
* Licensed under MPL 2.0 (see LICENSE.txt)
|
||||
*/
|
||||
|
||||
var ctx, i, j, randlist,
|
||||
new_normal, new_imageData, new_arrayBuffer,
|
||||
browser = Browser.browser + " " +
|
||||
Browser.version + " on " +
|
||||
Browser.OS,
|
||||
do_imageData = false,
|
||||
do_arrayBuffer = false,
|
||||
conf = {
|
||||
'create_cnt' : 2000,
|
||||
'read_cnt' : 5000000,
|
||||
'write_cnt' : 5000000,
|
||||
'iterations' : 0,
|
||||
'order_l1' : [browser],
|
||||
'order_l2' : ['normal',
|
||||
'imageData',
|
||||
'arrayBuffer'],
|
||||
'order_l3' : ['create',
|
||||
'sequentialRead',
|
||||
'randomRead',
|
||||
'sequentialWrite']
|
||||
},
|
||||
stats = {},
|
||||
testFunc = {},
|
||||
iteration, arraySize;
|
||||
|
||||
var newline = "\n";
|
||||
if (Util.Engine.trident) {
|
||||
var newline = "<br>\n";
|
||||
}
|
||||
function message(str) {
|
||||
//console.log(str);
|
||||
cell = $D('messages');
|
||||
cell.innerHTML += str + newline;
|
||||
cell.scrollTop = cell.scrollHeight;
|
||||
}
|
||||
|
||||
function vmessage(str) {
|
||||
if (verbose) {
|
||||
message(str);
|
||||
} else {
|
||||
console.log(str);
|
||||
}
|
||||
}
|
||||
|
||||
new_normal = function() {
|
||||
var arr = [], i;
|
||||
for (i = 0; i < arraySize; i++) {
|
||||
arr[i] = 0;
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
|
||||
/* Will be overridden with real function */
|
||||
new_imageData = function() {
|
||||
throw("imageData not supported");
|
||||
};
|
||||
|
||||
new_imageData_createImageData = function() {
|
||||
var imageData = ctx.createImageData(1024/4, arraySize / 1024);
|
||||
return imageData.data;
|
||||
};
|
||||
|
||||
new_imageData_getImageData = function() {
|
||||
var imageData = ctx.getImageData(0, 0, 1024/4, arraySize / 1024),
|
||||
arr = imageData.data;
|
||||
for (i = 0; i < arraySize; i++) {
|
||||
arr[i] = 0;
|
||||
}
|
||||
return arr;
|
||||
};
|
||||
|
||||
new_arrayBuffer = function() {
|
||||
var arr = new ArrayBuffer(arraySize);
|
||||
return new Uint8Array(arr);
|
||||
}
|
||||
|
||||
function init_randlist() {
|
||||
randlist = [];
|
||||
for (var i=0; i < arraySize; i++) {
|
||||
randlist[i] = parseInt(Math.random() * 256, 10);
|
||||
}
|
||||
}
|
||||
function copy_randlist(arr) {
|
||||
for (var i=0; i < arraySize; i++) {
|
||||
arr[i] = randlist[i];
|
||||
}
|
||||
}
|
||||
|
||||
function begin() {
|
||||
var i, j;
|
||||
conf.iterations = parseInt($D('iterations').value, 10);
|
||||
arraySize = parseInt($D('arraySize').value, 10) * 1024;
|
||||
|
||||
init_randlist();
|
||||
|
||||
// TODO: randomize test_list
|
||||
|
||||
stats = {};
|
||||
for (i = 0; i < conf.order_l2.length; i++) {
|
||||
stats[conf.order_l2[i]] = {};
|
||||
for (j = 0; j < conf.order_l3.length; j++) {
|
||||
stats[conf.order_l2[i]][conf.order_l3[j]] = [];
|
||||
}
|
||||
}
|
||||
|
||||
$D('startButton').value = "Running";
|
||||
$D('startButton').disabled = true;
|
||||
|
||||
message("running " + conf.iterations + " test iterations");
|
||||
iteration = 1;
|
||||
setTimeout(run_next_iteration, 250);
|
||||
}
|
||||
|
||||
function finish() {
|
||||
var totalTime, arrayType, testType, times;
|
||||
message("tests finished");
|
||||
|
||||
for (j = 0; j < conf.order_l3.length; j++) {
|
||||
testType = conf.order_l3[j];
|
||||
message("Test '" + testType + "'");
|
||||
for (i = 0; i < conf.order_l2.length; i++) {
|
||||
arrayType = conf.order_l2[i];
|
||||
message(" Array Type '" + arrayType);
|
||||
times = stats[arrayType][testType];
|
||||
message(" Average : " + times.mean() + "ms" +
|
||||
" (Total: " + times.sum() + "ms)");
|
||||
message(" Min/Max : " + times.min() + "ms/" +
|
||||
times.max() + "ms");
|
||||
message(" StdDev : " + times.stdDev() + "ms");
|
||||
}
|
||||
}
|
||||
|
||||
vmessage("array_chart.py JSON data:");
|
||||
chart_data = {'conf' : conf, 'stats' : { } };
|
||||
chart_data.stats[browser] = stats;
|
||||
chart_data.stats['next_browser'] = {};
|
||||
vmessage(JSON.stringify(chart_data, null, 2));
|
||||
|
||||
$D('startButton').disabled = false;
|
||||
$D('startButton').value = "Run Tests";
|
||||
}
|
||||
|
||||
function run_next_iteration() {
|
||||
var arrayType, testType, deltaTime;
|
||||
|
||||
for (i = 0; i < conf.order_l2.length; i++) {
|
||||
arrayType = conf.order_l2[i];
|
||||
if (arrayType === 'imageData' && (!do_imageData)) {
|
||||
continue;
|
||||
}
|
||||
if (arrayType === 'arrayBuffer' && (!do_arrayBuffer)) {
|
||||
continue;
|
||||
}
|
||||
for (j = 0; j < conf.order_l3.length; j++) {
|
||||
testType = conf.order_l3[j];
|
||||
|
||||
deltaTime = testFunc[arrayType + "_" + testType]();
|
||||
|
||||
stats[arrayType][testType].push(deltaTime);
|
||||
vmessage("test " + (arrayType + "_" + testType) +
|
||||
" time: " + (deltaTime) + "ms");
|
||||
}
|
||||
}
|
||||
|
||||
message("finished test iteration " + iteration);
|
||||
if (iteration >= conf.iterations) {
|
||||
setTimeout(finish, 1);
|
||||
return;
|
||||
}
|
||||
iteration++;
|
||||
setTimeout(run_next_iteration, 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Test functions
|
||||
*/
|
||||
|
||||
testFunc["normal_create"] = function() {
|
||||
var cnt, arrNormal, startTime, endTime;
|
||||
vmessage("create normal array " + conf.create_cnt + "x, initialized to 0");
|
||||
|
||||
startTime = (new Date()).getTime();
|
||||
for (cnt = 0; cnt < conf.create_cnt; cnt++) {
|
||||
arrNormal = new_normal();
|
||||
}
|
||||
endTime = (new Date()).getTime();
|
||||
|
||||
return endTime - startTime;
|
||||
};
|
||||
|
||||
testFunc["imageData_create"] = function() {
|
||||
var cnt, arrImage, startTime, endTime;
|
||||
vmessage("create imageData array " + conf.create_cnt + "x, initialized to 0");
|
||||
|
||||
startTime = (new Date()).getTime();
|
||||
for (cnt = 0; cnt < conf.create_cnt; cnt++) {
|
||||
arrImage = new_imageData();
|
||||
}
|
||||
endTime = (new Date()).getTime();
|
||||
|
||||
if (arrImage[103] !== 0) {
|
||||
message("Initialization failed, arrImage[103] is: " + arrImage[103]);
|
||||
throw("Initialization failed, arrImage[103] is: " + arrImage[103]);
|
||||
}
|
||||
return endTime - startTime;
|
||||
};
|
||||
|
||||
testFunc["arrayBuffer_create"] = function() {
|
||||
var cnt, arrBuffer, startTime, endTime;
|
||||
vmessage("create arrayBuffer array " + conf.create_cnt + "x, initialized to 0");
|
||||
|
||||
startTime = (new Date()).getTime();
|
||||
for (cnt = 0; cnt < conf.create_cnt; cnt++) {
|
||||
arrBuffer = new_arrayBuffer();
|
||||
}
|
||||
endTime = (new Date()).getTime();
|
||||
|
||||
if (arrBuffer[103] !== 0) {
|
||||
message("Initialization failed, arrBuffer[103] is: " + arrBuffer[103]);
|
||||
throw("Initialization failed, arrBuffer[103] is: " + arrBuffer[103]);
|
||||
}
|
||||
return endTime - startTime;
|
||||
};
|
||||
|
||||
function test_sequentialRead(arr) {
|
||||
var i, j, cnt, startTime, endTime;
|
||||
/* Initialize the array */
|
||||
copy_randlist(arr);
|
||||
|
||||
startTime = (new Date()).getTime();
|
||||
i = 0;
|
||||
j = 0;
|
||||
for (cnt = 0; cnt < conf.read_cnt; cnt++) {
|
||||
j = arr[i];
|
||||
i++;
|
||||
if (i >= arraySize) {
|
||||
i = 0;
|
||||
}
|
||||
}
|
||||
endTime = (new Date()).getTime();
|
||||
|
||||
return endTime - startTime;
|
||||
}
|
||||
|
||||
function test_randomRead(arr) {
|
||||
var i, cnt, startTime, endTime;
|
||||
/* Initialize the array */
|
||||
copy_randlist(arr); // used as jumplist
|
||||
|
||||
startTime = (new Date()).getTime();
|
||||
i = 0;
|
||||
for (cnt = 0; cnt < conf.read_cnt; cnt++) {
|
||||
i = (arr[i] + cnt) % arraySize;
|
||||
}
|
||||
endTime = (new Date()).getTime();
|
||||
|
||||
return endTime - startTime;
|
||||
}
|
||||
|
||||
function test_sequentialWrite(arr) {
|
||||
var i, cnt, startTime, endTime;
|
||||
/* Initialize the array */
|
||||
copy_randlist(arr);
|
||||
|
||||
startTime = (new Date()).getTime();
|
||||
i = 0;
|
||||
for (cnt = 0; cnt < conf.write_cnt; cnt++) {
|
||||
arr[i] = (cnt % 256);
|
||||
i++;
|
||||
if (i >= arraySize) {
|
||||
i = 0;
|
||||
}
|
||||
}
|
||||
endTime = (new Date()).getTime();
|
||||
|
||||
return endTime - startTime;
|
||||
}
|
||||
|
||||
/* Sequential Read Tests */
|
||||
testFunc["normal_sequentialRead"] = function() {
|
||||
vmessage("read normal array " + conf.read_cnt + "x");
|
||||
return test_sequentialRead(new_normal());
|
||||
};
|
||||
|
||||
testFunc["imageData_sequentialRead"] = function() {
|
||||
vmessage("read imageData array " + conf.read_cnt + "x");
|
||||
return test_sequentialRead(new_imageData());
|
||||
};
|
||||
|
||||
testFunc["arrayBuffer_sequentialRead"] = function() {
|
||||
vmessage("read arrayBuffer array " + conf.read_cnt + "x");
|
||||
return test_sequentialRead(new_arrayBuffer());
|
||||
};
|
||||
|
||||
|
||||
/* Random Read Tests */
|
||||
testFunc["normal_randomRead"] = function() {
|
||||
vmessage("read normal array " + conf.read_cnt + "x");
|
||||
return test_randomRead(new_normal());
|
||||
};
|
||||
|
||||
testFunc["imageData_randomRead"] = function() {
|
||||
vmessage("read imageData array " + conf.read_cnt + "x");
|
||||
return test_randomRead(new_imageData());
|
||||
};
|
||||
|
||||
testFunc["arrayBuffer_randomRead"] = function() {
|
||||
vmessage("read arrayBuffer array " + conf.read_cnt + "x");
|
||||
return test_randomRead(new_arrayBuffer());
|
||||
};
|
||||
|
||||
|
||||
/* Sequential Write Tests */
|
||||
testFunc["normal_sequentialWrite"] = function() {
|
||||
vmessage("write normal array " + conf.write_cnt + "x");
|
||||
return test_sequentialWrite(new_normal());
|
||||
};
|
||||
|
||||
testFunc["imageData_sequentialWrite"] = function() {
|
||||
vmessage("write imageData array " + conf.write_cnt + "x");
|
||||
return test_sequentialWrite(new_imageData());
|
||||
};
|
||||
|
||||
testFunc["arrayBuffer_sequentialWrite"] = function() {
|
||||
vmessage("write arrayBuffer array " + conf.write_cnt + "x");
|
||||
return test_sequentialWrite(new_arrayBuffer());
|
||||
};
|
||||
|
||||
init = function() {
|
||||
vmessage(">> init");
|
||||
|
||||
$D('iterations').value = 10;
|
||||
$D('arraySize').value = 10;
|
||||
arraySize = parseInt($D('arraySize').value, 10) * 1024;
|
||||
|
||||
message("Browser: " + browser);
|
||||
|
||||
/* Determine browser binary array support */
|
||||
try {
|
||||
ctx = $D('canvas').getContext('2d');
|
||||
new_imageData = new_imageData_createImageData;
|
||||
new_imageData();
|
||||
do_imageData = true;
|
||||
} catch (exc) {
|
||||
vmessage("createImageData not supported: " + exc);
|
||||
try {
|
||||
ctx = $D('canvas').getContext('2d');
|
||||
new_imageData = new_imageData_getImageData;
|
||||
blah = new_imageData();
|
||||
do_imageData = true;
|
||||
} catch (exc) {
|
||||
vmessage("getImageData not supported: " + exc);
|
||||
}
|
||||
}
|
||||
if (! do_imageData) {
|
||||
message("imageData arrays not supported");
|
||||
}
|
||||
|
||||
try {
|
||||
new_arrayBuffer();
|
||||
do_arrayBuffer = true;
|
||||
} catch (exc) {
|
||||
vmessage("Typed Arrays not supported: " + exc);
|
||||
}
|
||||
if (! do_arrayBuffer) {
|
||||
message("Typed Arrays (ArrayBuffers) not suppoted");
|
||||
}
|
||||
vmessage("<< init");
|
||||
}
|
|
@ -1,91 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>Native Base64 Tests</title>
|
||||
<script src="../include/util.js"></script>
|
||||
<script src="../include/webutil.js"></script>
|
||||
<script src="../include/base64.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Native Base64 Tests</h1>
|
||||
|
||||
<br>
|
||||
Messages:<br>
|
||||
<textarea id="debug" style="font-size: 9px;" cols=80 rows=25></textarea>
|
||||
|
||||
<br>
|
||||
</body>
|
||||
|
||||
<script>
|
||||
function debug(str) {
|
||||
console.log(str);
|
||||
cell = $D('debug');
|
||||
cell.innerHTML += str + "\n";
|
||||
cell.scrollTop = cell.scrollHeight;
|
||||
}
|
||||
|
||||
function assertRun(code, result) {
|
||||
try {
|
||||
var actual = eval(code);
|
||||
} catch (exc) {
|
||||
debug("FAIL: '" + code + "' threw an exception");
|
||||
fail += 1;
|
||||
return false;
|
||||
}
|
||||
if (actual !== result) {
|
||||
debug("FAIL: '" + code + "' returned '" + actual + "', expected '" + result + "'");
|
||||
fail += 1;
|
||||
return false;
|
||||
}
|
||||
debug("PASS: '" + code + "' returned expected '" + result +"'");
|
||||
pass += 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
function Base64_decode(data) {
|
||||
var arr = Base64.decode (data);
|
||||
return arr.map(function (num) {
|
||||
return String.fromCharCode(num); } ).join('');
|
||||
|
||||
}
|
||||
|
||||
window.onload = function() {
|
||||
var str;
|
||||
debug('onload');
|
||||
fail = 0;
|
||||
pass = 0;
|
||||
assertRun('window.btoa("hello world")', 'aGVsbG8gd29ybGQ=');
|
||||
assertRun('window.btoa("a")', 'YQ==');
|
||||
assertRun('window.btoa("ab")', 'YWI=');
|
||||
assertRun('window.btoa("abc")', 'YWJj');
|
||||
assertRun('window.btoa("abcd")', 'YWJjZA==');
|
||||
assertRun('window.btoa("abcde")', 'YWJjZGU=');
|
||||
assertRun('window.btoa("abcdef")', 'YWJjZGVm');
|
||||
assertRun('window.btoa("abcdefg")', 'YWJjZGVmZw==');
|
||||
assertRun('window.btoa("abcdefgh")', 'YWJjZGVmZ2g=');
|
||||
|
||||
assertRun('window.atob("aGVsbG8gd29ybGQ=")', 'hello world');
|
||||
assertRun('Base64_decode("aGVsbG8gd29ybGQ=")', 'hello world');
|
||||
assertRun('window.atob("YQ==")', 'a');
|
||||
assertRun('Base64_decode("YQ==")', 'a');
|
||||
assertRun('window.atob("YWI=")', 'ab');
|
||||
assertRun('Base64_decode("YWI=")', 'ab');
|
||||
assertRun('window.atob("YWJj")', 'abc');
|
||||
assertRun('Base64_decode("YWJj")', 'abc');
|
||||
assertRun('window.atob("YWJjZA==")', 'abcd');
|
||||
assertRun('Base64_decode("YWJjZA==")', 'abcd');
|
||||
assertRun('window.atob("YWJjZGU=")', 'abcde');
|
||||
assertRun('Base64_decode("YWJjZGU=")', 'abcde');
|
||||
assertRun('window.atob("YWJjZGVm")', 'abcdef');
|
||||
assertRun('Base64_decode("YWJjZGVm")', 'abcdef');
|
||||
|
||||
assertRun('typeof window.btoa', 'function');
|
||||
assertRun('window.btoa("")', '');
|
||||
assertRun('window.btoa(null)', '');
|
||||
assertRun('window.atob(window.btoa(window))', window.toString()); // "[object DOMWindow]"
|
||||
assertRun('window.btoa("\\u0080\\u0081")', 'gIE=');
|
||||
|
||||
debug("Tests failed: " + fail);
|
||||
debug("Tests passed: " + pass);
|
||||
}
|
||||
</script>
|
|
@ -1,12 +0,0 @@
|
|||
// The following results in 'hello [MANGLED]'
|
||||
//
|
||||
// Filed as https://github.com/ry/node/issues/issue/402
|
||||
|
||||
var sys = require("sys"),
|
||||
buf = new Buffer(1024), len,
|
||||
str1 = "aGVsbG8g", // 'hello '
|
||||
str2 = "d29ybGQ=", // 'world'
|
||||
|
||||
len = buf.write(str1, 0, 'base64');
|
||||
len += buf.write(str2, len, 'base64');
|
||||
sys.log("decoded result: " + buf.toString('binary', 0, len));
|
134
tests/browser.js
134
tests/browser.js
|
@ -1,134 +0,0 @@
|
|||
/*
|
||||
* From:
|
||||
* http://www.quirksmode.org/js/detect.html
|
||||
*/
|
||||
|
||||
var Browser = {
|
||||
init: function () {
|
||||
this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
|
||||
this.version = this.searchVersion(navigator.userAgent)
|
||||
|| this.searchVersion(navigator.appVersion)
|
||||
|| "an unknown version";
|
||||
this.majorVersion = this.searchMajorVersion(navigator.userAgent)
|
||||
|| this.searchMajorVersion(navigator.appVersion)
|
||||
|| "an unknown version";
|
||||
this.fullVersion = this.searchFullVersion(navigator.userAgent)
|
||||
|| this.searchFullVersion(navigator.appVersion)
|
||||
|| "an unknown version";
|
||||
this.OS = this.searchString(this.dataOS) || "an unknown OS";
|
||||
},
|
||||
searchString: function (data) {
|
||||
for (var i=0;i<data.length;i++) {
|
||||
var dataString = data[i].string;
|
||||
var dataProp = data[i].prop;
|
||||
this.versionSearchString = data[i].versionSearch || data[i].identity;
|
||||
if (dataString) {
|
||||
if (dataString.indexOf(data[i].subString) != -1)
|
||||
return data[i].identity;
|
||||
}
|
||||
else if (dataProp)
|
||||
return data[i].identity;
|
||||
}
|
||||
},
|
||||
searchFullVersion: function (dataString) {
|
||||
var index = dataString.indexOf(this.versionSearchString);
|
||||
if (index == -1) return;
|
||||
return dataString.substring(index+this.versionSearchString.length+1);
|
||||
},
|
||||
searchVersion: function (dataString) {
|
||||
return this.searchFullVersion(dataString).split(" ")[0];
|
||||
},
|
||||
searchMajorVersion: function (dataString) {
|
||||
return parseFloat(this.searchFullVersion(dataString).split(".")[0]);
|
||||
},
|
||||
dataBrowser: [
|
||||
{
|
||||
string: navigator.userAgent,
|
||||
subString: "Chrome",
|
||||
identity: "Chrome"
|
||||
},
|
||||
{ string: navigator.userAgent,
|
||||
subString: "OmniWeb",
|
||||
versionSearch: "OmniWeb/",
|
||||
identity: "OmniWeb"
|
||||
},
|
||||
{
|
||||
string: navigator.vendor,
|
||||
subString: "Apple",
|
||||
identity: "Safari",
|
||||
versionSearch: "Version"
|
||||
},
|
||||
{
|
||||
prop: window.opera,
|
||||
identity: "Opera",
|
||||
versionSearch: "Version"
|
||||
},
|
||||
{
|
||||
string: navigator.vendor,
|
||||
subString: "iCab",
|
||||
identity: "iCab"
|
||||
},
|
||||
{
|
||||
string: navigator.vendor,
|
||||
subString: "KDE",
|
||||
identity: "Konqueror"
|
||||
},
|
||||
{
|
||||
string: navigator.userAgent,
|
||||
subString: "Firefox",
|
||||
identity: "Firefox"
|
||||
},
|
||||
{
|
||||
string: navigator.vendor,
|
||||
subString: "Camino",
|
||||
identity: "Camino"
|
||||
},
|
||||
{ // for newer Netscapes (6+)
|
||||
string: navigator.userAgent,
|
||||
subString: "Netscape",
|
||||
identity: "Netscape"
|
||||
},
|
||||
{
|
||||
string: navigator.userAgent,
|
||||
subString: "MSIE",
|
||||
identity: "Explorer",
|
||||
versionSearch: "MSIE"
|
||||
},
|
||||
{
|
||||
string: navigator.userAgent,
|
||||
subString: "Gecko",
|
||||
identity: "Mozilla",
|
||||
versionSearch: "rv"
|
||||
},
|
||||
{ // for older Netscapes (4-)
|
||||
string: navigator.userAgent,
|
||||
subString: "Mozilla",
|
||||
identity: "Netscape",
|
||||
versionSearch: "Mozilla"
|
||||
}
|
||||
],
|
||||
dataOS : [
|
||||
{
|
||||
string: navigator.platform,
|
||||
subString: "Win",
|
||||
identity: "Windows"
|
||||
},
|
||||
{
|
||||
string: navigator.platform,
|
||||
subString: "Mac",
|
||||
identity: "Mac"
|
||||
},
|
||||
{
|
||||
string: navigator.userAgent,
|
||||
subString: "iPhone",
|
||||
identity: "iPhone/iPod"
|
||||
},
|
||||
{
|
||||
string: navigator.platform,
|
||||
subString: "Linux",
|
||||
identity: "Linux"
|
||||
}
|
||||
]
|
||||
|
||||
};
|
||||
Browser.init();
|
|
@ -1,148 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Canvas Performance Test</title>
|
||||
<!--
|
||||
<script type='text/javascript'
|
||||
src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script>
|
||||
-->
|
||||
<script src="../include/util.js"></script>
|
||||
<script src="../include/webutil.js"></script>
|
||||
<script src="../include/base64.js"></script>
|
||||
<script src="../include/display.js"></script>
|
||||
<script src="face.png.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
Iterations: <input id='iterations' style='width:50' value="100">
|
||||
|
||||
Width: <input id='width' style='width:50' value="640">
|
||||
Height: <input id='height' style='width:50' value="480">
|
||||
|
||||
<input id='startButton' type='button' value='Do Performance Test'
|
||||
style='width:150px' onclick="begin();">
|
||||
|
||||
<br><br>
|
||||
|
||||
<b>Canvas</b> (should see three squares and two happy faces):<br>
|
||||
<canvas id="canvas" width="200" height="100"
|
||||
style="border-style: dotted; border-width: 1px;">
|
||||
Canvas not supported.
|
||||
</canvas>
|
||||
|
||||
<br>
|
||||
Results:<br>
|
||||
<textarea id="messages" style="font-size: 9;" cols=80 rows=25></textarea>
|
||||
</body>
|
||||
|
||||
<script>
|
||||
var msg_cnt = 0;
|
||||
var display, start_width = 300, start_height = 100;
|
||||
var iterations;
|
||||
|
||||
function message(str) {
|
||||
console.log(str);
|
||||
cell = $D('messages');
|
||||
cell.innerHTML += msg_cnt + ": " + str + "\n";
|
||||
cell.scrollTop = cell.scrollHeight;
|
||||
msg_cnt += 1;
|
||||
}
|
||||
|
||||
function test_functions () {
|
||||
var img, x, y, w, h, ctx = display.get_context();
|
||||
w = display.get_width();
|
||||
h = display.get_height();
|
||||
display.fillRect(0, 0, w, h, [240,240,240]);
|
||||
|
||||
display.blitStringImage("data:image/png;base64," + face64, 150, 10);
|
||||
|
||||
var himg = new Image();
|
||||
himg.onload = function () {
|
||||
ctx.drawImage(himg, 200, 40); };
|
||||
himg.src = "face.png";
|
||||
|
||||
/* Test array image data */
|
||||
data = [];
|
||||
for (y=0; y< 50; y++) {
|
||||
for (x=0; x< 50; x++) {
|
||||
data[(y*50 + x)*4 + 0] = 255 - parseInt((255 / 50) * y, 10);
|
||||
data[(y*50 + x)*4 + 1] = parseInt((255 / 50) * y, 10);
|
||||
data[(y*50 + x)*4 + 2] = parseInt((255 / 50) * x, 10);
|
||||
data[(y*50 + x)*4 + 3] = 255;
|
||||
}
|
||||
}
|
||||
display.blitImage(30, 10, 50, 50, data, 0);
|
||||
|
||||
img = display.getTile(5,5,16,16,[0,128,128]);
|
||||
display.putTile(img);
|
||||
|
||||
img = display.getTile(90,15,16,16,[0,0,0]);
|
||||
display.setSubTile(img, 0,0,16,16,[128,128,0]);
|
||||
display.putTile(img);
|
||||
}
|
||||
|
||||
function begin () {
|
||||
$D('startButton').value = "Running";
|
||||
$D('startButton').disabled = true;
|
||||
setTimeout(start_delayed, 250);
|
||||
iterations = $D('iterations').value;
|
||||
}
|
||||
|
||||
function start_delayed () {
|
||||
var ret;
|
||||
|
||||
ret = display.set_prefer_js(true);
|
||||
if (ret) {
|
||||
message("Running test: prefer Javascript ops");
|
||||
var time1 = run_test();
|
||||
message("prefer Javascript ops: " + time1 + "ms total, " +
|
||||
(time1 / iterations) + "ms per frame");
|
||||
} else {
|
||||
message("Could not run: prefer Javascript ops");
|
||||
}
|
||||
|
||||
display.set_prefer_js(false);
|
||||
message("Running test: prefer Canvas ops");
|
||||
var time2 = run_test();
|
||||
message("prefer Canvas ops: " + time2 + "ms total, " +
|
||||
(time2 / iterations) + "ms per frame");
|
||||
|
||||
if (Util.get_logging() !== 'debug') {
|
||||
display.resize(start_width, start_height, true);
|
||||
test_functions();
|
||||
}
|
||||
$D('startButton').disabled = false;
|
||||
$D('startButton').value = "Do Performance Test";
|
||||
}
|
||||
|
||||
function run_test () {
|
||||
var width, height;
|
||||
width = $D('width').value;
|
||||
height = $D('height').value;
|
||||
display.resize(width, height);
|
||||
var color, start_time = (new Date()).getTime(), w, h;
|
||||
for (var i=0; i < iterations; i++) {
|
||||
color = [128, 128, (255 / iterations) * i, 0];
|
||||
for (var x=0; x < width; x = x + 16) {
|
||||
for (var y=0; y < height; y = y + 16) {
|
||||
w = Math.min(16, width - x);
|
||||
h = Math.min(16, height - y);
|
||||
var tile = display.getTile(x, y, w, h, color);
|
||||
display.setSubTile(tile, 0, 0, w, h, color);
|
||||
display.putTile(tile);
|
||||
}
|
||||
}
|
||||
}
|
||||
var end_time = (new Date()).getTime();
|
||||
return (end_time - start_time);
|
||||
}
|
||||
|
||||
window.onload = function() {
|
||||
message("in onload");
|
||||
$D('iterations').value = 10;
|
||||
display = new Display({'target' : $D('canvas')});
|
||||
display.resize(start_width, start_height, true);
|
||||
message("Canvas initialized");
|
||||
test_functions();
|
||||
}
|
||||
</script>
|
||||
</html>
|
|
@ -1,135 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>Cursor Change test</title>
|
||||
<meta charset="UTF-8">
|
||||
<!--
|
||||
<script type='text/javascript'
|
||||
src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script>
|
||||
-->
|
||||
<script src="../include/util.js"></script>
|
||||
<script src="../include/webutil.js"></script>
|
||||
<script src="../include/base64.js"></script>
|
||||
<script src="../include/canvas.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Roll over the buttons to test cursors</h1>
|
||||
<br>
|
||||
<input id=button1 type="button" value="Cursor from file (smiley face)">
|
||||
<input id=button2 type="button" value="Data URI cursor (crosshair)">
|
||||
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
Debug:<br>
|
||||
<textarea id="debug" style="font-size: 9px;" cols=80 rows=25></textarea>
|
||||
<br>
|
||||
<br>
|
||||
<canvas id="testcanvas" width="100px" height="20px">
|
||||
Canvas not supported.
|
||||
</canvas>
|
||||
|
||||
</body>
|
||||
|
||||
<script>
|
||||
function debug(str) {
|
||||
console.log(str);
|
||||
cell = $D('debug');
|
||||
cell.innerHTML += str + "\n";
|
||||
cell.scrollTop = cell.scrollHeight;
|
||||
}
|
||||
|
||||
function makeCursor() {
|
||||
var arr = [], x, y, w = 32, h = 32, hx = 16, hy = 16;
|
||||
|
||||
var IHDRsz = 40;
|
||||
var ANDsz = w * h * 4;
|
||||
var XORsz = Math.ceil( (w * h) / 8.0 );
|
||||
|
||||
// Push multi-byte little-endian values
|
||||
arr.push16le = function (num) {
|
||||
this.push((num ) & 0xFF,
|
||||
(num >> 8) & 0xFF );
|
||||
};
|
||||
arr.push32le = function (num) {
|
||||
this.push((num ) & 0xFF,
|
||||
(num >> 8) & 0xFF,
|
||||
(num >> 16) & 0xFF,
|
||||
(num >> 24) & 0xFF );
|
||||
};
|
||||
|
||||
// Main header
|
||||
arr.push16le(0); // Reserved
|
||||
arr.push16le(2); // .CUR type
|
||||
arr.push16le(1); // Number of images, 1 for non-animated arr
|
||||
|
||||
// Cursor #1
|
||||
arr.push(w); // width
|
||||
arr.push(h); // height
|
||||
arr.push(0); // colors, 0 -> true-color
|
||||
arr.push(0); // reserved
|
||||
arr.push16le(hx); // hotspot x coordinate
|
||||
arr.push16le(hy); // hotspot y coordinate
|
||||
arr.push32le(IHDRsz + XORsz + ANDsz); // cursor data byte size
|
||||
arr.push32le(22); // offset of cursor data in the file
|
||||
|
||||
// Infoheader for Cursor #1
|
||||
arr.push32le(IHDRsz); // Infoheader size
|
||||
arr.push32le(w); // Cursor width
|
||||
arr.push32le(h*2); // XOR+AND height
|
||||
arr.push16le(1); // number of planes
|
||||
arr.push16le(32); // bits per pixel
|
||||
arr.push32le(0); // type of compression
|
||||
arr.push32le(XORsz + ANDsz); // Size of Image
|
||||
arr.push32le(0);
|
||||
arr.push32le(0);
|
||||
arr.push32le(0);
|
||||
arr.push32le(0);
|
||||
|
||||
// XOR/color data
|
||||
for (y = h-1; y >= 0; y--) {
|
||||
for (x = 0; x < w; x++) {
|
||||
//if ((x === hx) || (y === (h-hy-1))) {
|
||||
if ((x === hx) || (y === hy)) {
|
||||
arr.push(0xe0); // blue
|
||||
arr.push(0x00); // green
|
||||
arr.push(0x00); // red
|
||||
arr.push(0xff); // alpha
|
||||
} else {
|
||||
arr.push(0x05); // blue
|
||||
arr.push(0xe6); // green
|
||||
arr.push(0x00); // red
|
||||
arr.push(0x80); // alpha
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// AND/bitmask data (seems to be ignored)
|
||||
for (y = 0; y < h; y++) {
|
||||
for (x = 0; x < Math.ceil(w / 8); x++) {
|
||||
arr.push(0x00);
|
||||
}
|
||||
}
|
||||
|
||||
debug("cursor generated");
|
||||
return arr;
|
||||
}
|
||||
|
||||
window.onload = function() {
|
||||
debug("onload");
|
||||
var canvas, cross, cursor, cursor64;
|
||||
|
||||
canvas = new Canvas({'target' : $D("testcanvas")});
|
||||
debug("canvas indicates Data URI cursor support is: " + canvas.get_cursor_uri());
|
||||
|
||||
$D('button1').style.cursor="url(face.png), default";
|
||||
|
||||
cursor = makeCursor();
|
||||
cursor64 = Base64.encode(cursor);
|
||||
//debug("cursor: " + cursor.slice(0,100) + " (" + cursor.length + ")");
|
||||
//debug("cursor64: " + cursor64.slice(0,100) + " (" + cursor64.length + ")");
|
||||
$D('button2').style.cursor="url(data:image/x-icon;base64," + cursor64 + "), default";
|
||||
|
||||
debug("onload complete");
|
||||
}
|
||||
</script>
|
BIN
tests/face.png
BIN
tests/face.png
Binary file not shown.
Before Width: | Height: | Size: 2.2 KiB |
|
@ -1 +0,0 @@
|
|||
var face64 = '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';
|
|
@ -1,29 +0,0 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Mocha Tests</title>
|
||||
<link rel="stylesheet" href="node_modules/mocha/mocha.css" />
|
||||
</head>
|
||||
<body>
|
||||
<!--
|
||||
To run tests
|
||||
cd .../noVNC/tests
|
||||
npm install chai mocha
|
||||
open keyboard-tests.html in a browser
|
||||
-->
|
||||
<div id="mocha"></div>
|
||||
<script src="node_modules/chai/chai.js"></script>
|
||||
<script src="node_modules/mocha/mocha.js"></script>
|
||||
<script>mocha.setup('bdd')</script>
|
||||
<script src="../include/keysymdef.js"></script>
|
||||
<script src="../include/keyboard.js"></script>
|
||||
<script src="test.keyboard.js"></script>
|
||||
<script src="test.helper.js"></script>
|
||||
<script>
|
||||
mocha.checkLeaks();
|
||||
mocha.globals(['navigator']);
|
||||
mocha.run();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -1,53 +0,0 @@
|
|||
/*
|
||||
* Define some useful statistical functions on arrays of numbers
|
||||
*/
|
||||
|
||||
Array.prototype.sum = function() {
|
||||
var i, sum = 0;
|
||||
for (i = 0; i < this.length; i++) {
|
||||
sum += this[i];
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
||||
Array.prototype.max = function() {
|
||||
return Math.max.apply(null, this);
|
||||
}
|
||||
|
||||
Array.prototype.min = function() {
|
||||
return Math.min.apply(null, this);
|
||||
}
|
||||
|
||||
Array.prototype.mean = function() {
|
||||
return this.sum() / this.length;
|
||||
}
|
||||
Array.prototype.average = Array.prototype.mean;
|
||||
|
||||
Array.prototype.median = function() {
|
||||
var sorted = this.sort( function(a,b) { return a-b; }),
|
||||
len = sorted.length;
|
||||
if (len % 2) {
|
||||
return sorted[Math.floor(len / 2)]; // Odd
|
||||
} else {
|
||||
return (sorted[len/2 - 1] + sorted[len/2]) / 2; // Even
|
||||
}
|
||||
}
|
||||
|
||||
Array.prototype.stdDev = function(sample) {
|
||||
var i, sumSqr = 0, mean = this.mean(), N;
|
||||
|
||||
if (sample) {
|
||||
// Population correction if this is a sample
|
||||
N = this.length - 1;
|
||||
} else {
|
||||
// Standard deviation of just the array
|
||||
N = this.length;
|
||||
}
|
||||
|
||||
for (i = 0; i < this.length; i++) {
|
||||
sumSqr += Math.pow(this[i] - mean, 2);
|
||||
}
|
||||
|
||||
return Math.sqrt(sumSqr / N);
|
||||
}
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
html,body {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.flex-layout {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
display: box;
|
||||
display: -webkit-box;
|
||||
display: -moz-box;
|
||||
display: -ms-box;
|
||||
|
||||
box-orient: vertical;
|
||||
-webkit-box-orient: vertical;
|
||||
-moz-box-orient: vertical;
|
||||
-ms-box-orient: vertical;
|
||||
|
||||
box-align: stretch;
|
||||
-webkit-box-align: stretch;
|
||||
-moz-box-align: stretch;
|
||||
-ms-box-align: stretch;
|
||||
}
|
||||
.flex-box {
|
||||
box-flex: 1;
|
||||
-webkit-box-flex: 1;
|
||||
-moz-box-flex: 1;
|
||||
-ms-box-flex: 1;
|
||||
}
|
||||
|
||||
.container {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
.canvas {
|
||||
position: absolute;
|
||||
border-style: dotted;
|
||||
border-width: 1px;
|
||||
}
|
|
@ -1,203 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head><title>Viewport Test</title>
|
||||
<link rel="stylesheet" href="viewport.css">
|
||||
<!--
|
||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
||||
-->
|
||||
<meta name=viewport content="width=device-width, initial-scale=1.0, user-scalable=no">
|
||||
</head>
|
||||
<body>
|
||||
<div class="flex-layout">
|
||||
<div>
|
||||
Canvas:
|
||||
<input id="move-selector" type="button" value="Move"
|
||||
onclick="toggleMove();">
|
||||
<br>
|
||||
</div>
|
||||
<div class="container flex-box">
|
||||
<canvas id="canvas" class="canvas">
|
||||
Canvas not supported.
|
||||
</canvas>
|
||||
<br>
|
||||
</div>
|
||||
<div>
|
||||
<br>
|
||||
Results:<br>
|
||||
<textarea id="messages" style="font-size: 9;" cols=80 rows=8></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<!--
|
||||
<script type='text/javascript'
|
||||
src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script>
|
||||
-->
|
||||
<script src="../include/util.js"></script>
|
||||
<script src="../include/webutil.js"></script>
|
||||
<script src="../include/base64.js"></script>
|
||||
<script src="../include/keysymdef.js"></script>
|
||||
<script src="../include/keyboard.js"></script>
|
||||
<script src="../include/input.js"></script>
|
||||
<script src="../include/display.js"></script>
|
||||
<script>
|
||||
var msg_cnt = 0, iterations,
|
||||
penDown = false, doMove = false,
|
||||
inMove = false, lastPos = {},
|
||||
padW = 0, padH = 0,
|
||||
display, ctx, keyboard, mouse;
|
||||
|
||||
var newline = "\n";
|
||||
if (Util.Engine.trident) {
|
||||
var newline = "<br>\n";
|
||||
}
|
||||
|
||||
function message(str) {
|
||||
console.log(str);
|
||||
cell = $D('messages');
|
||||
cell.innerHTML += msg_cnt + ": " + str + newline;
|
||||
cell.scrollTop = cell.scrollHeight;
|
||||
msg_cnt++;
|
||||
}
|
||||
|
||||
function mouseButton(x, y, down, bmask) {
|
||||
//msg = 'mouse x,y: ' + x + ',' + y + ' down: ' + down;
|
||||
//msg += ' bmask: ' + bmask;
|
||||
//message(msg);
|
||||
|
||||
if (doMove) {
|
||||
if (down && !inMove) {
|
||||
inMove = true;
|
||||
lastPos = {'x': x, 'y': y};
|
||||
} else if (!down && inMove) {
|
||||
inMove = false;
|
||||
//dirtyRedraw();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (down && ! penDown) {
|
||||
penDown = true;
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(x, y);
|
||||
} else if (!down && penDown) {
|
||||
penDown = false;
|
||||
ctx.closePath();
|
||||
}
|
||||
}
|
||||
|
||||
function mouseMove(x, y) {
|
||||
var deltaX, deltaY;
|
||||
|
||||
if (inMove) {
|
||||
//deltaX = x - lastPos.x; // drag viewport
|
||||
deltaX = lastPos.x - x; // drag frame buffer
|
||||
//deltaY = y - lastPos.y; // drag viewport
|
||||
deltaY = lastPos.y - y; // drag frame buffer
|
||||
lastPos = {'x': x, 'y': y};
|
||||
|
||||
display.viewportChangePos(deltaX, deltaY);
|
||||
return;
|
||||
}
|
||||
|
||||
if (penDown) {
|
||||
ctx.lineTo(x, y);
|
||||
ctx.stroke();
|
||||
}
|
||||
}
|
||||
|
||||
function dirtyRedraw() {
|
||||
if (inMove) {
|
||||
// Wait for user to stop moving viewport
|
||||
return;
|
||||
}
|
||||
|
||||
var d = display.getCleanDirtyReset();
|
||||
|
||||
for (i = 0; i < d.dirtyBoxes.length; i++) {
|
||||
//showBox(d.dirtyBoxes[i], "dirty[" + i + "]: ");
|
||||
drawArea(d.dirtyBoxes[i]);
|
||||
}
|
||||
}
|
||||
|
||||
function drawArea(b) {
|
||||
var data = [], pixel, x, y;
|
||||
|
||||
//message("draw "+b.x+","+b.y+" ("+b.w+","+b.h+")");
|
||||
|
||||
for (var i = 0; i < b.w; i++) {
|
||||
x = b.x + i;
|
||||
for (var j = 0; j < b.h; j++) {
|
||||
y = b.y + j;
|
||||
pixel = (j * b.w * 4 + i * 4);
|
||||
data[pixel + 0] = ((x * y) / 13) % 256;
|
||||
data[pixel + 1] = ((x * y) + 392) % 256;
|
||||
data[pixel + 2] = ((x + y) + 256) % 256;
|
||||
data[pixel + 3] = 255;
|
||||
}
|
||||
}
|
||||
//message("i: " + i + ", j: " + j + ", pixel: " + pixel);
|
||||
display.blitImage(b.x, b.y, b.w, b.h, data, 0);
|
||||
}
|
||||
|
||||
function toggleMove() {
|
||||
if (doMove) {
|
||||
doMove = false;
|
||||
$D('move-selector').style.backgroundColor = "";
|
||||
$D('move-selector').style.color = "";
|
||||
} else {
|
||||
doMove = true;
|
||||
$D('move-selector').style.backgroundColor = "black";
|
||||
$D('move-selector').style.color = "lightgray";
|
||||
}
|
||||
}
|
||||
|
||||
function detectPad() {
|
||||
var c = $D('canvas'), p = c.parentNode;
|
||||
c.width = 10;
|
||||
c.height = 10;
|
||||
padW = c.offsetWidth - 10;
|
||||
padH = c.offsetHeight - 10;
|
||||
message("padW: " + padW + ", padH: " + padH);
|
||||
}
|
||||
|
||||
function doResize() {
|
||||
var p = $D('canvas').parentNode;
|
||||
message("doResize1: [" + (p.offsetWidth - padW) +
|
||||
"," + (p.offsetHeight - padH) + "]");
|
||||
display.viewportChangeSize(p.offsetWidth - padW, p.offsetHeight - padH);
|
||||
/*
|
||||
var pos, new_w, new_h;pos
|
||||
pos = Util.getPosition($D('canvas').parentNode);
|
||||
new_w = window.innerWidth - pos.x;
|
||||
new_h = window.innerHeight - pos.y;
|
||||
display.viewportChangeSize(new_w, new_h);
|
||||
*/
|
||||
}
|
||||
|
||||
window.onload = function() {
|
||||
detectPad();
|
||||
|
||||
display = new Display({'target': $D('canvas')});
|
||||
display.resize(1600, 1024);
|
||||
display.set_viewport(true);
|
||||
ctx = display.get_context();
|
||||
|
||||
mouse = new Mouse({'target': $D('canvas'),
|
||||
'onMouseButton': mouseButton,
|
||||
'onMouseMove': mouseMove});
|
||||
mouse.grab();
|
||||
|
||||
|
||||
Util.addEvent(window, 'resize', doResize);
|
||||
// Shrink viewport for first resize call so that the
|
||||
// scrollbars are disabled
|
||||
display.viewportChangeSize(10, 10);
|
||||
setTimeout(doResize, 1);
|
||||
setInterval(dirtyRedraw, 50);
|
||||
|
||||
message("Display initialized");
|
||||
};
|
||||
</script>
|
||||
</html>
|
Loading…
Reference in New Issue