mirror of
https://github.com/denoland/deno.git
synced 2024-11-25 15:29:32 -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(
|
||||
env: *mut Env,
|
||||
change_in_bytes: i64,
|
||||
adjusted_value: &mut i64,
|
||||
adjusted_value: *mut i64,
|
||||
) -> Result {
|
||||
check_env!(env);
|
||||
check_arg!(env, adjusted_value);
|
||||
|
||||
let env = unsafe { &mut *env };
|
||||
let isolate = &mut *env.isolate_ptr;
|
||||
*adjusted_value =
|
||||
isolate.adjust_amount_of_external_allocated_memory(change_in_bytes);
|
||||
|
||||
napi_clear_last_error(env);
|
||||
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 date;
|
||||
pub mod error;
|
||||
pub mod mem;
|
||||
pub mod numbers;
|
||||
pub mod object_wrap;
|
||||
pub mod primitives;
|
||||
|
@ -152,6 +153,8 @@ unsafe extern "C" fn napi_register_module_v1(
|
|||
r#async::init(env, exports);
|
||||
date::init(env, exports);
|
||||
tsfn::init(env, exports);
|
||||
mem::init(env, exports);
|
||||
|
||||
init_cleanup_hook(env, 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