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:
Divy Srivastava 2023-01-23 05:30:01 -08:00 committed by GitHub
parent c3e0b12c72
commit cd19231306
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 53 additions and 1 deletions

View file

@ -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
View 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);
});

View file

@ -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
View 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()
));
}