| <!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->Native Bridge Mode: <select id="js-native-modes"></select><br></label> |
| <label style="display:none">Native->JS Bridge Mode: <select id="native-js-modes"></select><br></label> |
| <label><input type="checkbox" id="use-setTimeout"> Force async JS->Native</label><br> |
| <label><input type="checkbox" id="async-echo"> Force async Native->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> </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> |