blob: c2679ba987b826cc90acc64ec538530f0b5d4c2a [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width,height=device-height,user-scalable=no,maximum-scale=1.0,initial-scale=1.0" />
<meta http-equiv="Content-type" content="text/html; charset=utf-8"> <!-- ISO-8859-1 -->
<title>Cordova Mobile Spec</title>
<link rel="stylesheet" href="../master.css" type="text/css" media="screen" title="no title" charset="utf-8">
<script type="text/javascript" charset="utf-8" src="../cordova.js"></script>
<script>
var exec = cordova.require('cordova/exec'),
appLogElem = null,
deviceReady = false;
function appLog(message) {
if (!appLogElem) {
appLogElem = document.getElementById('app-logs');
}
appLogElem.innerText += message + '\n';
if (window.console) {
console.log(message);
}
}
function clearLogs() {
appLogElem.innerHTML = '';
}
function benchExec() {
var echo = cordova.require('cordova/plugin/echo'),
startTime = +new Date,
callCount = 0,
durationMs = parseInt(document.getElementById('test-duration').value, 10) * 1000,
asyncEcho = !!document.getElementById('async-echo').value,
useSetTimeout = !!document.getElementById('use-setTimeout').value,
jsToNativeMode = document.getElementById('js-native-modes').value,
nativeToJsMode = document.getElementById('native-js-modes').value,
payloadSize = +document.getElementById('payload-size').value,
payload = new Array(payloadSize * 10 + 1).join('012\n\n 6789');
function win(result) {
callCount++;
if (result != payload) {
appLog('Wrong echo data!');
}
var elapsedMs = new Date - startTime;
if (elapsedMs < durationMs) {
if (useSetTimeout) {
setTimeout(echoMessage, 0);
} else {
echoMessage();
}
} else {
var callsPerSecond = callCount * 1000 / elapsedMs;
appLog('Calls per second: ' + callsPerSecond);
}
}
function fail() {
appLog('Call failed!');
}
function echoMessage() {
echo(win, fail, payload, asyncEcho);
}
var logMsg = 'Started exec benchmark with setTimeout: ' + useSetTimeout + ' payload length: ' + payload.length;
if (jsToNativeMode) {
exec.setJsToNativeBridgeMode(+jsToNativeMode);
logMsg += ' jsToNativeMode: ' + jsToNativeMode;
}
if (nativeToJsMode) {
exec.setNativeToJsBridgeMode(+nativeToJsMode);
logMsg += ' nativeToJsMode: ' + nativeToJsMode;
}
appLog(logMsg);
echoMessage();
setTimeout(function() {
if (!callCount) {
alert('Echo plugin did not respond');
}
}, 500);
}
function configure() {
function configureModes(elemId, modes) {
var selectElem = document.getElementById(elemId);
for (var modeName in modes) {
var optionElem = document.createElement('option');
optionElem.value = modes[modeName];
optionElem.innerText = modeName;
selectElem.appendChild(optionElem);
}
selectElem.parentNode.style.display = 'block';
}
if (exec.jsToNativeModes) {
configureModes('js-native-modes', exec.jsToNativeModes);
}
if (exec.nativeToJsModes) {
configureModes('native-js-modes', exec.nativeToJsModes);
}
}
document.addEventListener("deviceready", function() {
deviceReady = true;
appLog("Device="+device.platform+" "+device.version);
configure();
}, false);
window.onload = function() {
window.setTimeout(function() {
if (!deviceReady) {
alert("Error: Cordova did not initialize. Demo will not run correctly.");
}
}, 1000);
};
</script>
</head>
<body id="stage" class="theme">
<h1>exec() Benchmark</h1>
<fieldset>
<legend>Settings</legend>
<label>Test Duration: <select id="test-duration"><option>1 Second</option><option>5 Seconds</option></select><br></label>
<label style="display:none">JS-&gt;Native Bridge Mode: <select id="js-native-modes"></select><br></label>
<label style="display:none">Native-&gt;JS Bridge Mode: <select id="native-js-modes"></select><br></label>
<label><input type="checkbox" id="use-setTimeout"> Force async JS-&gt;Native</label><br>
<label><input type="checkbox" id="async-echo"> Force async Native-&gt;JS</label><br>
<label>Payload size (in 100s of bytes) <input id="payload-size" value="5" style="width:100px"></label><br>
<button onclick="benchExec()">Benchmark exec</button><br>
</fieldset>
<h2>&nbsp</h2><a href="javascript:" class="backBtn" onclick="backHome();">Back</a><br>
<div>Results: <a href="javascript:clearLogs();">Clear</a></div>
<pre id="app-logs" style="white-space:pre-wrap;line-height:initial"></pre>
</body>
</html>