Updated Branches: refs/heads/master 444a89013 -> 2cef31367
Add a benchmark into CordovaLibApp for measuring exec() speed. Project: http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/commit/2cef3136 Tree: http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/tree/2cef3136 Diff: http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/diff/2cef3136 Branch: refs/heads/master Commit: 2cef313671476dda7aa43ebef5206ac3f22815b7 Parents: 444a890 Author: Andrew Grieve <agri...@chromium.org> Authored: Wed Aug 8 11:28:37 2012 -0400 Committer: Andrew Grieve <agri...@chromium.org> Committed: Wed Aug 8 11:31:34 2012 -0400 ---------------------------------------------------------------------- CordovaLib/CordovaLibApp/Cordova.plist | 22 +----- CordovaLib/CordovaLibApp/EchoPlugin.h | 23 ++++++ CordovaLib/CordovaLibApp/EchoPlugin.m | 32 ++++++++ CordovaLib/CordovaLibApp/www/index.html | 62 +++++++++++++++- CordovaLib/CordovaTests.xcodeproj/project.pbxproj | 6 ++ 5 files changed, 124 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/blob/2cef3136/CordovaLib/CordovaLibApp/Cordova.plist ---------------------------------------------------------------------- diff --git a/CordovaLib/CordovaLibApp/Cordova.plist b/CordovaLib/CordovaLibApp/Cordova.plist index 69d86a3..4725c8a 100644 --- a/CordovaLib/CordovaLibApp/Cordova.plist +++ b/CordovaLib/CordovaLibApp/Cordova.plist @@ -1,25 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<!-- -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---> <plist version="1.0"> <dict> <key>UIWebViewBounce</key> @@ -76,6 +56,8 @@ <string>CDVCapture</string> <key>SplashScreen</key> <string>CDVSplashScreen</string> + <key>EchoPlugin</key> + <string>EchoPlugin</string> <key>Battery</key> <string>CDVBattery</string> </dict> http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/blob/2cef3136/CordovaLib/CordovaLibApp/EchoPlugin.h ---------------------------------------------------------------------- diff --git a/CordovaLib/CordovaLibApp/EchoPlugin.h b/CordovaLib/CordovaLibApp/EchoPlugin.h new file mode 100644 index 0000000..3c5055d --- /dev/null +++ b/CordovaLib/CordovaLibApp/EchoPlugin.h @@ -0,0 +1,23 @@ +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + */ + +#import "CDVPlugin.h" + +@interface EchoPlugin : CDVPlugin +@end http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/blob/2cef3136/CordovaLib/CordovaLibApp/EchoPlugin.m ---------------------------------------------------------------------- diff --git a/CordovaLib/CordovaLibApp/EchoPlugin.m b/CordovaLib/CordovaLibApp/EchoPlugin.m new file mode 100644 index 0000000..c1790a8 --- /dev/null +++ b/CordovaLib/CordovaLibApp/EchoPlugin.m @@ -0,0 +1,32 @@ +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + */ + + +#import "EchoPlugin.h" +#import "CDV.h" + +@implementation EchoPlugin + +- (void)echo:(CDVInvokedUrlCommand*)command +{ + CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:[command.arguments objectAtIndex:0]]; + [self success:pluginResult callbackId:command.callbackId]; +} + +@end http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/blob/2cef3136/CordovaLib/CordovaLibApp/www/index.html ---------------------------------------------------------------------- diff --git a/CordovaLib/CordovaLibApp/www/index.html b/CordovaLib/CordovaLibApp/www/index.html index f7ec13c..bb6955a 100644 --- a/CordovaLib/CordovaLibApp/www/index.html +++ b/CordovaLib/CordovaLibApp/www/index.html @@ -69,9 +69,67 @@ // Used by unit tests to tell when the page is loaded. window.pageIsLoaded = true; // do your thing! - navigator.notification.alert("Cordova is working") + navigator.notification.alert("Cordova is working") } + var appLogElem; + function appLog(message) { + if (!appLogElem) { + appLogElem = document.getElementById('app-logs'); + } + appLogElem.innerText += message + '\n'; + } + + function benchExec() + { + appLog('Started exec benchmark'); + var exec = cordova.require('cordova/exec'), + BENCH_DURATION_MS = 2000, + BENCH_PAYLOAD = 'This is a small test message.', + startTime = +new Date, + callCount = 0; + + function win(result) { + callCount++; + if (result != BENCH_PAYLOAD) { + appLog('Wrong echo data!'); + } + var elapsedMs = new Date - startTime; + if (elapsedMs < BENCH_DURATION_MS) { + setTimeout(echoMessage, 0); + } else { + var callsPerSecond = callCount * 1000 / elapsedMs; + appLog('Calls per second: ' + callsPerSecond); + } + } + function fail() { + appLog('Call failed!'); + } + function echoMessage() { + exec(win, fail, "EchoPlugin", "echo", [BENCH_PAYLOAD]); + } + echoMessage(); + setTimeout(function() { + if (!callCount) { + alert('Echo plugin did not respond'); + } + }, 500); + + // Benchmark results on agrieve's iPad 3: + // webView:shouldStartLoadWithRequest:navigationType: + // ~350 Echos per second. + // NSURLProtocol with XHR to gap:///gapready, not handling response: + // ~160 Echos per second. + // NSURLProtocol with XHR to http:///gapready, not handling response: + // ~215 Echos per second. + // NSURLProtocol with XHR to file:///gapready, not handling response: + // ~215 Echos per second. + // NSURLProtocol with XHR to about:/gapready, not handling response: + // ~160 Echos per second. + // NSURLProtocol with XHR to http:///gapready, *with* handling response: + // ~160 Echos per second. + } + </script> </head> <body onload="onBodyLoad()"> @@ -80,5 +138,7 @@ <li>Check your console log for any white-list rejection errors.</li> <li>Add your allowed <strong>hosts</strong> in Cordova.plist/ExternalHosts (wildcards OK, don't enter the URL scheme)</li> </ol> + <button onclick="benchExec()">Benchmark exec</button> + <pre id="app-logs"></pre> </body> </html> http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/blob/2cef3136/CordovaLib/CordovaTests.xcodeproj/project.pbxproj ---------------------------------------------------------------------- diff --git a/CordovaLib/CordovaTests.xcodeproj/project.pbxproj b/CordovaLib/CordovaTests.xcodeproj/project.pbxproj index 3d1fda3..03bc898 100644 --- a/CordovaLib/CordovaTests.xcodeproj/project.pbxproj +++ b/CordovaLib/CordovaTests.xcodeproj/project.pbxproj @@ -43,6 +43,7 @@ 68A32D7E141030EB006B237C /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 686357AA141002F100DF4CF2 /* UIKit.framework */; }; 68A32D7F141030F3006B237C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 686357AC141002F100DF4CF2 /* Foundation.framework */; }; EB37019415D18B9A00BEBC43 /* libCordova.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EB37018C15D18B2E00BEBC43 /* libCordova.a */; }; + EB68E0BA15D2BCF400885F79 /* EchoPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = EB68E0B915D2BCF400885F79 /* EchoPlugin.m */; }; EBA3554615A731F100F4DE24 /* CDVFakeFileManager.m in Sources */ = {isa = PBXBuildFile; fileRef = EBA3554515A731F100F4DE24 /* CDVFakeFileManager.m */; }; EBA3556F15ABD0C900F4DE24 /* CDVFileTransferTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EBA3556E15ABD0C900F4DE24 /* CDVFileTransferTests.m */; }; /* End PBXBuildFile section */ @@ -105,6 +106,8 @@ 686357DC14100B1600DF4CF2 /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework; sourceTree = SDKROOT; }; 68A32D7414103017006B237C /* AddressBook.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AddressBook.framework; path = System/Library/Frameworks/AddressBook.framework; sourceTree = SDKROOT; }; EB37018115D18B2D00BEBC43 /* CordovaLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = CordovaLib.xcodeproj; sourceTree = "<group>"; }; + EB68E0B815D2BCF400885F79 /* EchoPlugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EchoPlugin.h; sourceTree = "<group>"; }; + EB68E0B915D2BCF400885F79 /* EchoPlugin.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EchoPlugin.m; sourceTree = "<group>"; }; EBA3550F15A5F18900F4DE24 /* CDVWebViewTest.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CDVWebViewTest.h; sourceTree = "<group>"; }; EBA3554415A731F100F4DE24 /* CDVFakeFileManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDVFakeFileManager.h; sourceTree = "<group>"; }; EBA3554515A731F100F4DE24 /* CDVFakeFileManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDVFakeFileManager.m; sourceTree = "<group>"; }; @@ -197,6 +200,8 @@ 30F8AE1C152129DA006625B3 /* www */, 303A4076152124BB00182201 /* AppDelegate.h */, 303A4077152124BB00182201 /* AppDelegate.m */, + EB68E0B815D2BCF400885F79 /* EchoPlugin.h */, + EB68E0B915D2BCF400885F79 /* EchoPlugin.m */, 303A4079152124BB00182201 /* ViewController.h */, 303A407A152124BB00182201 /* ViewController.m */, 303A406E152124BB00182201 /* Supporting Files */, @@ -400,6 +405,7 @@ 303A4074152124BB00182201 /* main.m in Sources */, 303A4078152124BB00182201 /* AppDelegate.m in Sources */, 303A407B152124BB00182201 /* ViewController.m in Sources */, + EB68E0BA15D2BCF400885F79 /* EchoPlugin.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; };