Introduce a RandonNumberGenerator class. Refactor the random/private_random uses...
authorbmeurer@chromium.org <bmeurer@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Tue, 10 Sep 2013 11:13:55 +0000 (11:13 +0000)
committerbmeurer@chromium.org <bmeurer@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Tue, 10 Sep 2013 11:13:55 +0000 (11:13 +0000)
commiteb381b9444c6b1ec78414d1c9375f67c320cae74
tree51d6c1a21078ced9ac16d0e1a6c667758b4e00ef
parentf6b7ec4da0ed11afc072d613fbbab9d1db9154c8
Introduce a RandonNumberGenerator class. Refactor the random/private_random uses in Isolate/Context.

The RandomNumberGenerator is a pseudorandom number generator
with 48-bit state. It is properly seeded using either

(1) the --random-seed if specified, or
(2) the entropy_source function if configured, or
(3) /dev/urandom if available, or
(4) falls back to Time and TimeTicks based seeding.

Each Isolate now contains a RandomNumberGenerator, which replaces
the previous private_random_seed.

Every native context still has its own random_seed. But this random
seed is now properly initialized during bootstrapping,
instead of on-demand initialization. This will allow us to cleanup
and speedup the HRandom implementation quite a lot (this is delayed
for a followup CL)!

Also stop messing with the system rand()/random(), which should
not be done from a library anyway! We probably re-seeded the
libc rand()/random() after the application (i.e. Chrome) already
seeded it (with better entropy than what we used).

Another followup CL will replace the use of the per-isolate
random number generator for the address randomization and
thereby get rid of the Isolate::UncheckedCurrent() usage in
the platform code.

TEST=cctest/test-random-number-generator,cctest/test-random
R=mstarzinger@chromium.org

Review URL: https://codereview.chromium.org/23548024

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16612 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
34 files changed:
src/api.cc
src/assembler.cc
src/bootstrapper.cc
src/flags.h
src/heap.cc
src/isolate-inl.h
src/isolate.cc
src/isolate.h
src/objects.cc
src/platform-cygwin.cc
src/platform-freebsd.cc
src/platform-linux.cc
src/platform-macos.cc
src/platform-openbsd.cc
src/platform-posix.cc
src/platform-solaris.cc
src/platform-win32.cc
src/platform.h
src/platform/time.h
src/utils/random-number-generator.cc [new file with mode: 0644]
src/utils/random-number-generator.h [new file with mode: 0644]
src/v8.cc
src/v8.h
test/cctest/cctest.gyp
test/cctest/test-assembler-x64.cc
test/cctest/test-platform-linux.cc
test/cctest/test-platform-win32.cc
test/cctest/test-random-number-generator.cc [new file with mode: 0644]
test/cctest/test-random.cc
test/cctest/test-spaces.cc
test/cctest/test-strings.cc
test/cctest/test-strtod.cc
test/cctest/test-utils.cc
tools/gyp/v8.gyp