mirror of
https://github.com/denoland/deno.git
synced 2024-12-22 23:34:47 -05:00
41c7e96f1a
* In order to prevent ArrayBuffers from getting garbage collected by V8, we used to store a v8::Persistent<ArrayBuffer> in a map. This patch introduces a custom ArrayBuffer allocator which doesn't use Persistent handles, but instead stores a pointer to the actual ArrayBuffer data alongside with a reference count. Since creating Persistent handles has quite a bit of overhead, this change significantly increases performance. Various HTTP server benchmarks report about 5-10% more requests per second than before. * Previously the Persistent handle that prevented garbage collection had to be released manually, and this wasn't always done, which was causing memory leaks. This has been resolved by introducing a new `PinnedBuf` type in both Rust and C++ that automatically re-enables garbage collection when it goes out of scope. * Zero-copy buffers are now correctly wrapped in an Option if there is a possibility that they're not present. This clears up a correctness issue where we were creating zero-length slices from a null pointer, which is against the rules.
32 lines
717 B
Rust
32 lines
717 B
Rust
// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
|
|
#[macro_use]
|
|
extern crate log;
|
|
extern crate futures;
|
|
extern crate libc;
|
|
|
|
mod flags;
|
|
mod isolate;
|
|
mod js_errors;
|
|
mod libdeno;
|
|
mod modules;
|
|
mod shared_queue;
|
|
|
|
pub use crate::flags::v8_set_flags;
|
|
pub use crate::isolate::*;
|
|
pub use crate::js_errors::*;
|
|
pub use crate::libdeno::deno_buf;
|
|
pub use crate::libdeno::deno_mod;
|
|
pub use crate::libdeno::PinnedBuf;
|
|
pub use crate::modules::*;
|
|
|
|
pub fn v8_version() -> &'static str {
|
|
use std::ffi::CStr;
|
|
let version = unsafe { libdeno::deno_v8_version() };
|
|
let c_str = unsafe { CStr::from_ptr(version) };
|
|
c_str.to_str().unwrap()
|
|
}
|
|
|
|
#[test]
|
|
fn test_v8_version() {
|
|
assert!(v8_version().len() > 3);
|
|
}
|