Browse Source

stream: micro-optimize high water mark calculation

Don't iterate over all 32 bits, use some hacker's delight bit twiddling
to compute the next power of two.

The logic can be reduced to `n = 1 << 32 - Math.clz32(n)` but then it
can't easily be backported to v2.x; Math.clz32() was added in V8 4.3.

PR-URL: https://github.com/nodejs/node/pull/2479
Reviewed-By: Chris Dickinson <christopher.s.dickinson@gmail.com>
Reviewed-By: Sakthipriyan Vairamani <thechargingvolcano@gmail.com>
v4.0.0-rc
Ben Noordhuis 9 years ago
parent
commit
3af8e451f2
  1. 6
      lib/_stream_readable.js

6
lib/_stream_readable.js

@ -198,7 +198,11 @@ function roundUpToNextPowerOf2(n) {
} else { } else {
// Get the next highest power of 2 // Get the next highest power of 2
n--; n--;
for (var p = 1; p < 32; p <<= 1) n |= n >> p; n |= n >>> 1;
n |= n >>> 2;
n |= n >>> 4;
n |= n >>> 8;
n |= n >>> 16;
n++; n++;
} }
return n; return n;

Loading…
Cancel
Save