diff options
author | Divy Srivastava <dj.srivastava23@gmail.com> | 2022-05-17 20:49:55 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-17 20:49:55 +0530 |
commit | 68bf43fca7990d4e623b66243c2840ca7f0c3628 (patch) | |
tree | b5b94663c0923281ce1c7e71bbeb06843d2f770a /core/runtime.rs | |
parent | d76acfdc17e27b53fc53e6cd3051ff0acaefef42 (diff) |
feat(core): deterministic snapshots (#14037)
Diffstat (limited to 'core/runtime.rs')
-rw-r--r-- | core/runtime.rs | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/core/runtime.rs b/core/runtime.rs index f8afeb76c..476267a94 100644 --- a/core/runtime.rs +++ b/core/runtime.rs @@ -204,7 +204,10 @@ impl Drop for JsRuntime { } } -fn v8_init(v8_platform: Option<v8::SharedRef<v8::Platform>>) { +fn v8_init( + v8_platform: Option<v8::SharedRef<v8::Platform>>, + predictable: bool, +) { // Include 10MB ICU data file. #[repr(C, align(16))] struct IcuData([u8; 10284336]); @@ -222,7 +225,15 @@ fn v8_init(v8_platform: Option<v8::SharedRef<v8::Platform>>) { " --harmony-import-assertions", " --no-validate-asm", ); - v8::V8::set_flags_from_string(flags); + + if predictable { + v8::V8::set_flags_from_string(&format!( + "{}{}", + flags, " --predictable --random-seed=42" + )); + } else { + v8::V8::set_flags_from_string(flags); + } } #[derive(Default)] @@ -251,6 +262,7 @@ pub struct RuntimeOptions { pub startup_snapshot: Option<Snapshot>, /// Prepare runtime to take snapshot of loaded code. + /// The snapshot is determinstic and uses predictable random numbers. /// /// Currently can't be used with `startup_snapshot`. pub will_snapshot: bool, @@ -284,7 +296,7 @@ impl JsRuntime { let v8_platform = options.v8_platform.take(); static DENO_INIT: Once = Once::new(); - DENO_INIT.call_once(move || v8_init(v8_platform)); + DENO_INIT.call_once(move || v8_init(v8_platform, options.will_snapshot)); let has_startup_snapshot = options.startup_snapshot.is_some(); |