Browse Source

Improve perf2.js, thanks @yuri91 for fixing (via gitter)

master
rayburgemeestre 6 years ago
parent
commit
82b204b178
1 changed files with 16 additions and 28 deletions
  1. +16
    -28
      src/examples/perf2.js

+ 16
- 28
src/examples/perf2.js View File

{ {
public: public:
JsBridge() = default; JsBridge() = default;
void sort(client::Float64Array* ar)
{
// copy all the numbers
std::vector<double> test;
test.reserve(ar->get_length());

for(size_t i=0;i<ar->get_length();i++) {
test.push_back((*ar)[i]);
}

void sort(client::Float64Array* ar)
{
// get a plain c pointer
double* ptr = &(*ar)[0];
size_t len = ar->get_length();
// sort them // sort them
std::sort(std::begin(test), std::end(test), std::less<double>()) ;

// copy them back
for(size_t i=0;i<ar->get_length();i++) {
(*ar)[i] = test[i];
}
}
std::sort(ptr, ptr + len, std::less<double>()) ;
}
}; };
void webMain() { void webMain() {
} }
<head> <head>
<script> <script>
function benchmark(func) { function benchmark(func) {
var start = new Date().getTime();
let start = new Date().getTime();
func(); func();
var time = new Date().getTime() - start;
return time;
return new Date().getTime() - start;
} }


// Please note that running this might take a while! (but I expect < 30s on an average PC) // Please note that running this might take a while! (but I expect < 30s on an average PC)
for (var n = 10; n <= 10000000; n *= 10) {
for (let n = 10; n <= 10000000; n *= 10) {
document.write("<strong>Test for N=",n,"</strong><BR>"); document.write("<strong>Test for N=",n,"</strong><BR>");
var some_array = [], some_array2 = [];
var time = benchmark(function () {
let some_array = [], some_array2 = [],
time = benchmark(function () {
for (var i = 0; i < n; ++i) { for (var i = 0; i < n; ++i) {
var num = Math.random(); var num = Math.random();
some_array.push(num); some_array.push(num);
jsBridge.sort(some_array2) jsBridge.sort(some_array2)
); );
document.write("C++: ",some_array2.slice(0, 1), ", took: ",(time/1000.0)," secs<BR>"); document.write("C++: ",some_array2.slice(0, 1), ", took: ",(time/1000.0)," secs<BR>");
// JS // JS
time = benchmark(_ => time = benchmark(_ =>
some_array.sort((a, b) => a - b) // lambda required for sorting numerically instead of alphabetically some_array.sort((a, b) => a - b) // lambda required for sorting numerically instead of alphabetically
} }
</script> </script>
</head> </head>
<body>
</body>
</html> </html>
`.trim(); `.trim();



Loading…
Cancel
Save