Skip to content

Commit

Permalink
fix(napi): improve napi_adjust_external_memory (denoland#17501)
Browse files Browse the repository at this point in the history
<!--
Before submitting a PR, please read https://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 denoland#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.
-->
  • Loading branch information
littledivy committed Jan 23, 2023
1 parent c3e0b12 commit cd19231
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 1 deletion.
6 changes: 5 additions & 1 deletion cli/napi/js_native_api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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(())
}

Expand Down
11 changes: 11 additions & 0 deletions test_napi/mem_test.js
Original file line number Diff line number Diff line change
@@ -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);
});
3 changes: 3 additions & 0 deletions test_napi/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down
34 changes: 34 additions & 0 deletions test_napi/src/mem.rs
Original file line number Diff line number Diff line change
@@ -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()
));
}

0 comments on commit cd19231

Please sign in to comment.