Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ jobs:
uses: cargo-bins/cargo-binstall@main

- name: Install nextest
run: cargo binstall cargo-nextest --secure --locked --no-confirm
run: cargo binstall cargo-nextest@0.9.126 --secure --locked --no-confirm
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Expand Down Expand Up @@ -293,7 +293,7 @@ jobs:
uses: cargo-bins/cargo-binstall@main

- name: Install nextest
run: cargo binstall cargo-nextest --secure --locked
run: cargo binstall cargo-nextest@0.9.126 --secure --locked

- name: Install python
uses: actions/setup-python@v5
Expand Down
60 changes: 60 additions & 0 deletions src/binding.cc
Original file line number Diff line number Diff line change
Expand Up @@ -432,6 +432,66 @@ void v8__ResourceConstraints__ConfigureDefaults(
constraints->ConfigureDefaults(physical_memory, virtual_memory_limit);
}

size_t v8__ResourceConstraints__max_old_generation_size_in_bytes(
const v8::ResourceConstraints* constraints) {
return constraints->max_old_generation_size_in_bytes();
}

void v8__ResourceConstraints__set_max_old_generation_size_in_bytes(
v8::ResourceConstraints* constraints, size_t limit) {
constraints->set_max_old_generation_size_in_bytes(limit);
}

size_t v8__ResourceConstraints__max_young_generation_size_in_bytes(
const v8::ResourceConstraints* constraints) {
return constraints->max_young_generation_size_in_bytes();
}

void v8__ResourceConstraints__set_max_young_generation_size_in_bytes(
v8::ResourceConstraints* constraints, size_t limit) {
constraints->set_max_young_generation_size_in_bytes(limit);
}

size_t v8__ResourceConstraints__code_range_size_in_bytes(
const v8::ResourceConstraints* constraints) {
return constraints->code_range_size_in_bytes();
}

void v8__ResourceConstraints__set_code_range_size_in_bytes(
v8::ResourceConstraints* constraints, size_t limit) {
constraints->set_code_range_size_in_bytes(limit);
}

uint32_t* v8__ResourceConstraints__stack_limit(
const v8::ResourceConstraints* constraints) {
return constraints->stack_limit();
}

void v8__ResourceConstraints__set_stack_limit(
v8::ResourceConstraints* constraints, uint32_t* value) {
constraints->set_stack_limit(value);
}

size_t v8__ResourceConstraints__initial_old_generation_size_in_bytes(
const v8::ResourceConstraints* constraints) {
return constraints->initial_old_generation_size_in_bytes();
}

void v8__ResourceConstraints__set_initial_old_generation_size_in_bytes(
v8::ResourceConstraints* constraints, size_t initial_size) {
constraints->set_initial_old_generation_size_in_bytes(initial_size);
}

size_t v8__ResourceConstraints__initial_young_generation_size_in_bytes(
const v8::ResourceConstraints* constraints) {
return constraints->initial_young_generation_size_in_bytes();
}

void v8__ResourceConstraints__set_initial_young_generation_size_in_bytes(
v8::ResourceConstraints* constraints, size_t initial_size) {
constraints->set_initial_young_generation_size_in_bytes(initial_size);
}

void v8__HandleScope__CONSTRUCT(uninit_t<v8::HandleScope>* buf,
v8::Isolate* isolate) {
construct_in_place<v8::HandleScope>(buf, isolate);
Expand Down
228 changes: 228 additions & 0 deletions src/isolate_create_params.rs
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,110 @@ impl CreateParams {
self
}

/// Returns the maximum size of the old generation in bytes.
pub fn max_old_generation_size_in_bytes(&self) -> usize {
self.raw.constraints.max_old_generation_size_in_bytes()
}

/// Sets the maximum size of the old generation in bytes. When the old
/// generation approaches this limit, V8 will perform series of garbage
/// collections and invoke the NearHeapLimitCallback.
pub fn set_max_old_generation_size_in_bytes(mut self, limit: usize) -> Self {
self
.raw
.constraints
.set_max_old_generation_size_in_bytes(limit);
self
}

/// Returns the maximum size of the young generation in bytes.
pub fn max_young_generation_size_in_bytes(&self) -> usize {
self.raw.constraints.max_young_generation_size_in_bytes()
}

/// Sets the maximum size of the young generation in bytes. The young
/// generation consists of two semi-spaces and a large object space. This
/// affects frequency of Scavenge garbage collections.
pub fn set_max_young_generation_size_in_bytes(
mut self,
limit: usize,
) -> Self {
self
.raw
.constraints
.set_max_young_generation_size_in_bytes(limit);
self
}

/// Returns the code range size in bytes.
pub fn code_range_size_in_bytes(&self) -> usize {
self.raw.constraints.code_range_size_in_bytes()
}

/// Sets the amount of virtual memory reserved for generated code in bytes.
/// This is relevant for 64-bit architectures that rely on code range for
/// calls in code.
pub fn set_code_range_size_in_bytes(mut self, limit: usize) -> Self {
self.raw.constraints.set_code_range_size_in_bytes(limit);
self
}

/// Returns the stack limit (the address beyond which the VM's stack may
/// not grow), or null if not set.
pub fn stack_limit(&self) -> *mut u32 {
self.raw.constraints.stack_limit()
}

/// Sets the address beyond which the VM's stack may not grow.
///
/// # Safety
///
/// The caller must ensure that the pointer remains valid for the lifetime
/// of the isolate, and points to a valid stack boundary.
pub unsafe fn set_stack_limit(mut self, value: *mut u32) -> Self {
self.raw.constraints.set_stack_limit(value);
self
}

/// Returns the initial size of the old generation in bytes.
pub fn initial_old_generation_size_in_bytes(&self) -> usize {
self.raw.constraints.initial_old_generation_size_in_bytes()
}

/// Sets the initial size of the old generation in bytes. Setting the
/// initial size avoids ineffective garbage collections at startup if the
/// live set is large.
pub fn set_initial_old_generation_size_in_bytes(
mut self,
initial_size: usize,
) -> Self {
self
.raw
.constraints
.set_initial_old_generation_size_in_bytes(initial_size);
self
}

/// Returns the initial size of the young generation in bytes.
pub fn initial_young_generation_size_in_bytes(&self) -> usize {
self
.raw
.constraints
.initial_young_generation_size_in_bytes()
}

/// Sets the initial size of the young generation in bytes.
pub fn set_initial_young_generation_size_in_bytes(
mut self,
initial_size: usize,
) -> Self {
self
.raw
.constraints
.set_initial_young_generation_size_in_bytes(initial_size);
self
}

/// A CppHeap used to construct the Isolate. V8 takes ownership of the
/// CppHeap passed this way.
pub fn cpp_heap(mut self, heap: UniqueRef<Heap>) -> Self {
Expand Down Expand Up @@ -267,6 +371,48 @@ pub(crate) mod raw {
physical_memory: u64,
virtual_memory_limit: u64,
);
fn v8__ResourceConstraints__max_old_generation_size_in_bytes(
constraints: *const ResourceConstraints,
) -> usize;
fn v8__ResourceConstraints__set_max_old_generation_size_in_bytes(
constraints: *mut ResourceConstraints,
limit: usize,
);
fn v8__ResourceConstraints__max_young_generation_size_in_bytes(
constraints: *const ResourceConstraints,
) -> usize;
fn v8__ResourceConstraints__set_max_young_generation_size_in_bytes(
constraints: *mut ResourceConstraints,
limit: usize,
);
fn v8__ResourceConstraints__code_range_size_in_bytes(
constraints: *const ResourceConstraints,
) -> usize;
fn v8__ResourceConstraints__set_code_range_size_in_bytes(
constraints: *mut ResourceConstraints,
limit: usize,
);
fn v8__ResourceConstraints__stack_limit(
constraints: *const ResourceConstraints,
) -> *mut u32;
fn v8__ResourceConstraints__set_stack_limit(
constraints: *mut ResourceConstraints,
value: *mut u32,
);
fn v8__ResourceConstraints__initial_old_generation_size_in_bytes(
constraints: *const ResourceConstraints,
) -> usize;
fn v8__ResourceConstraints__set_initial_old_generation_size_in_bytes(
constraints: *mut ResourceConstraints,
initial_size: usize,
);
fn v8__ResourceConstraints__initial_young_generation_size_in_bytes(
constraints: *const ResourceConstraints,
) -> usize;
fn v8__ResourceConstraints__set_initial_young_generation_size_in_bytes(
constraints: *mut ResourceConstraints,
initial_size: usize,
);
}

impl ResourceConstraints {
Expand Down Expand Up @@ -297,5 +443,87 @@ pub(crate) mod raw {
);
}
}

pub fn max_old_generation_size_in_bytes(&self) -> usize {
unsafe { v8__ResourceConstraints__max_old_generation_size_in_bytes(self) }
}

pub fn set_max_old_generation_size_in_bytes(&mut self, limit: usize) {
unsafe {
v8__ResourceConstraints__set_max_old_generation_size_in_bytes(
self, limit,
);
}
}

pub fn max_young_generation_size_in_bytes(&self) -> usize {
unsafe {
v8__ResourceConstraints__max_young_generation_size_in_bytes(self)
}
}

pub fn set_max_young_generation_size_in_bytes(&mut self, limit: usize) {
unsafe {
v8__ResourceConstraints__set_max_young_generation_size_in_bytes(
self, limit,
);
}
}

pub fn code_range_size_in_bytes(&self) -> usize {
unsafe { v8__ResourceConstraints__code_range_size_in_bytes(self) }
}

pub fn set_code_range_size_in_bytes(&mut self, limit: usize) {
unsafe {
v8__ResourceConstraints__set_code_range_size_in_bytes(self, limit);
}
}

pub fn stack_limit(&self) -> *mut u32 {
unsafe { v8__ResourceConstraints__stack_limit(self) }
}

pub fn set_stack_limit(&mut self, value: *mut u32) {
unsafe {
v8__ResourceConstraints__set_stack_limit(self, value);
}
}

pub fn initial_old_generation_size_in_bytes(&self) -> usize {
unsafe {
v8__ResourceConstraints__initial_old_generation_size_in_bytes(self)
}
}

pub fn set_initial_old_generation_size_in_bytes(
&mut self,
initial_size: usize,
) {
unsafe {
v8__ResourceConstraints__set_initial_old_generation_size_in_bytes(
self,
initial_size,
);
}
}

pub fn initial_young_generation_size_in_bytes(&self) -> usize {
unsafe {
v8__ResourceConstraints__initial_young_generation_size_in_bytes(self)
}
}

pub fn set_initial_young_generation_size_in_bytes(
&mut self,
initial_size: usize,
) {
unsafe {
v8__ResourceConstraints__set_initial_young_generation_size_in_bytes(
self,
initial_size,
);
}
}
}
}
Loading