mirror of
https://github.com/denoland/deno.git
synced 2024-11-21 15:04:11 -05:00
fix(napi): improve napi_adjust_external_memory (#17501)
<!-- Before submitting a PR, please read http://deno.land/manual/contributing 1. Give the PR a descriptive title. Examples of good title: - fix(std/http): Fix race condition in server - docs(console): Update docstrings - feat(doc): Handle nested reexports Examples of bad title: - fix #7123 - update docs - fix bugs 2. Ensure there is a related issue and it is referenced in the PR text. 3. Ensure there are tests that cover the changes. 4. Ensure `cargo test` passes. 5. Ensure `./tools/format.js` passes without changing files. 6. Ensure `./tools/lint.js` passes. 7. Open as a draft PR if your work is still in progress. The CI won't run all steps, but you can add '[ci]' to a commit message to force it to. 8. If you would like to run the benchmarks on the CI, add the 'ci-bench' label. -->
This commit is contained in:
parent
c3e0b12c72
commit
cd19231306
4 changed files with 53 additions and 1 deletions
|
@ -1223,13 +1223,17 @@ fn napi_add_finalizer(
|
||||||
fn napi_adjust_external_memory(
|
fn napi_adjust_external_memory(
|
||||||
env: *mut Env,
|
env: *mut Env,
|
||||||
change_in_bytes: i64,
|
change_in_bytes: i64,
|
||||||
adjusted_value: &mut i64,
|
adjusted_value: *mut i64,
|
||||||
) -> Result {
|
) -> Result {
|
||||||
check_env!(env);
|
check_env!(env);
|
||||||
|
check_arg!(env, adjusted_value);
|
||||||
|
|
||||||
let env = unsafe { &mut *env };
|
let env = unsafe { &mut *env };
|
||||||
let isolate = &mut *env.isolate_ptr;
|
let isolate = &mut *env.isolate_ptr;
|
||||||
*adjusted_value =
|
*adjusted_value =
|
||||||
isolate.adjust_amount_of_external_allocated_memory(change_in_bytes);
|
isolate.adjust_amount_of_external_allocated_memory(change_in_bytes);
|
||||||
|
|
||||||
|
napi_clear_last_error(env);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
11
test_napi/mem_test.js
Normal file
11
test_napi/mem_test.js
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
|
||||||
|
|
||||||
|
import { assert, loadTestLibrary } from "./common.js";
|
||||||
|
|
||||||
|
const mem = loadTestLibrary();
|
||||||
|
|
||||||
|
Deno.test("napi adjust external memory", function () {
|
||||||
|
const adjusted = mem.adjust_external_memory();
|
||||||
|
assert(typeof adjusted === "number");
|
||||||
|
assert(adjusted > 0);
|
||||||
|
});
|
|
@ -13,6 +13,7 @@ pub mod callback;
|
||||||
pub mod coerce;
|
pub mod coerce;
|
||||||
pub mod date;
|
pub mod date;
|
||||||
pub mod error;
|
pub mod error;
|
||||||
|
pub mod mem;
|
||||||
pub mod numbers;
|
pub mod numbers;
|
||||||
pub mod object_wrap;
|
pub mod object_wrap;
|
||||||
pub mod primitives;
|
pub mod primitives;
|
||||||
|
@ -152,6 +153,8 @@ unsafe extern "C" fn napi_register_module_v1(
|
||||||
r#async::init(env, exports);
|
r#async::init(env, exports);
|
||||||
date::init(env, exports);
|
date::init(env, exports);
|
||||||
tsfn::init(env, exports);
|
tsfn::init(env, exports);
|
||||||
|
mem::init(env, exports);
|
||||||
|
|
||||||
init_cleanup_hook(env, exports);
|
init_cleanup_hook(env, exports);
|
||||||
|
|
||||||
exports
|
exports
|
||||||
|
|
34
test_napi/src/mem.rs
Normal file
34
test_napi/src/mem.rs
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
|
||||||
|
|
||||||
|
use crate::assert_napi_ok;
|
||||||
|
use crate::napi_new_property;
|
||||||
|
use napi_sys::*;
|
||||||
|
use std::ptr;
|
||||||
|
|
||||||
|
extern "C" fn adjust_external_memory(
|
||||||
|
env: napi_env,
|
||||||
|
_: napi_callback_info,
|
||||||
|
) -> napi_value {
|
||||||
|
let mut adjusted_value = 0;
|
||||||
|
|
||||||
|
assert_napi_ok!(napi_adjust_external_memory(env, 1024, &mut adjusted_value));
|
||||||
|
|
||||||
|
let mut result = ptr::null_mut();
|
||||||
|
assert_napi_ok!(napi_create_int64(env, adjusted_value, &mut result));
|
||||||
|
result
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn init(env: napi_env, exports: napi_value) {
|
||||||
|
let properties = &[napi_new_property!(
|
||||||
|
env,
|
||||||
|
"adjust_external_memory",
|
||||||
|
adjust_external_memory
|
||||||
|
)];
|
||||||
|
|
||||||
|
assert_napi_ok!(napi_define_properties(
|
||||||
|
env,
|
||||||
|
exports,
|
||||||
|
properties.len(),
|
||||||
|
properties.as_ptr()
|
||||||
|
));
|
||||||
|
}
|
Loading…
Reference in a new issue