forked from angular/angular.js
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Created a performance test harness and reporter
- Loading branch information
Showing
8 changed files
with
103 additions
and
43 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||
<launchConfiguration type="org.eclipse.ui.externaltools.ProgramBuilderLaunchConfigurationType"> | ||
<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/> | ||
<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_BUILDER_ENABLED" value="false"/> | ||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_BUILD_SCOPE" value="${working_set:<?xml version="1.0" encoding="UTF-8"?> <resources> <item path="/angular.js/perf" type="2"/> <item path="/angular.js/src" type="2"/> </resources>}"/> | ||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/angular.js/perf.sh}"/> | ||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,auto,"/> | ||
<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/> | ||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc:/angular.js}"/> | ||
</launchConfiguration> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,28 +1,16 @@ | ||
describe('json', function() { | ||
|
||
it('angular parser', function() { | ||
var duration = time(function() { | ||
expect(angular.fromJson(largeJsonString)).toBeTruthy(); | ||
}, 1); | ||
|
||
dump(duration/1 + ' ms per iteration'); | ||
}); | ||
|
||
|
||
it('angular delegating to native parser', function() { | ||
var duration = time(function() { | ||
expect(angular.fromJson(largeJsonString, true)).toBeTruthy(); | ||
}, 100); | ||
|
||
dump(duration/100 + ' ms per iteration'); | ||
}); | ||
|
||
|
||
it('native json', function() { | ||
var duration = time(function() { | ||
expect(JSON.parse(largeJsonString)).toBeTruthy(); | ||
}, 100); | ||
|
||
dump(duration/100 + ' ms per iteration'); | ||
perf( | ||
function angular() { | ||
fromJson(largeJsonString); | ||
}, | ||
function nativeDelegate() { | ||
fromJson(largeJsonString, true); | ||
}, | ||
function nativeJSON() { | ||
JSON.parse(largeJsonString); | ||
} | ||
); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,20 +1,67 @@ | ||
if (window.jstestdriver) { | ||
jstd = jstestdriver; | ||
dump = angular.bind(jstd.console, jstd.console.log); | ||
dump = bind(jstd.console, jstd.console.log); | ||
} | ||
|
||
function time(fn, times) { | ||
times = times || 1; | ||
function time(fn) { | ||
var count = 1, | ||
targetTime = 500, | ||
start = new Date().getTime(), | ||
stop = start + targetTime, | ||
elapsed, | ||
end, | ||
iterations, | ||
pad = angularFilter.number; | ||
|
||
var i, | ||
start, | ||
duration = 0; | ||
|
||
for (i=0; i<times; i++) { | ||
start = Date.now(); | ||
fn(); | ||
duration += Date.now() - start; | ||
// do one iteration to guess how long it will take | ||
fn(); | ||
while((end=new Date().getTime()) < stop ){ | ||
// how much time has elapsed since we started the test | ||
elapsed = (end-start) || 1; | ||
// guess how many more iterations we need before we reach | ||
// the time limit. We do this so that we spend most of our | ||
// time in tight loop | ||
iterations = Math.ceil( | ||
// how much more time we need | ||
(targetTime - elapsed) | ||
/ | ||
2 // to prevent overrun guess low | ||
/ | ||
// this is how much the cost is so far per iteration | ||
(elapsed / count) | ||
); | ||
count += iterations; | ||
while(iterations--) { | ||
fn(); | ||
} | ||
} | ||
elapsed = end - start; | ||
return { | ||
count: count, | ||
total: elapsed, | ||
time: elapsed / count, | ||
name: fn.name, | ||
msg: '' + pad(elapsed / count, 3) | ||
+ ' ms [ ' + pad(1 / elapsed * count * 1000, 0) + ' ops/sec ] ' | ||
+ '(' + elapsed + ' ms/' + count + ')' | ||
}; | ||
|
||
} | ||
|
||
return duration; | ||
} | ||
function perf() { | ||
var log = [], | ||
summary = [], | ||
i, | ||
baseline, | ||
pad = angularFilter.number; | ||
|
||
for (i = 0; i < arguments.length; i++) { | ||
var fn = arguments[i]; | ||
var info = time(fn); | ||
if (baseline === undefined) baseline = info.time; | ||
summary.push(info.name + ': ' + pad(baseline / info.time, 2) + ' X'); | ||
log.push('\n ' + info.name + ': ' + info.msg); | ||
} | ||
log.unshift(summary.join(' - ')); | ||
dump(log.join(' ')); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
#!/bin/bash | ||
tests=$1 | ||
|
||
java -jar lib/jstestdriver/JsTestDriver.jar --tests all --reset |