mirror of
https://github.com/mii443/wasmer.git
synced 2025-12-12 21:38:39 +00:00
Add get_runtime_size for JS
This commit is contained in:
13
Cargo.lock
generated
13
Cargo.lock
generated
@@ -2315,6 +2315,17 @@ dependencies = [
|
||||
"serde_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde-wasm-bindgen"
|
||||
version = "0.4.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e3b4c031cd0d9014307d82b8abf653c0290fbdaeb4c02d00c63cf52f728628bf"
|
||||
dependencies = [
|
||||
"js-sys",
|
||||
"serde",
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_bytes"
|
||||
version = "0.11.7"
|
||||
@@ -3070,6 +3081,8 @@ dependencies = [
|
||||
"js-sys",
|
||||
"macro-wasmer-universal-test",
|
||||
"more-asserts",
|
||||
"serde",
|
||||
"serde-wasm-bindgen",
|
||||
"target-lexicon 0.12.4",
|
||||
"tempfile",
|
||||
"thiserror",
|
||||
|
||||
@@ -68,6 +68,9 @@ wasmer-derive = { path = "../derive", version = "=3.0.0-beta.2" }
|
||||
# - Optional dependencies for `js`.
|
||||
wasmparser = { version = "0.83", default-features = false, optional = true }
|
||||
hashbrown = { version = "0.11", optional = true }
|
||||
serde-wasm-bindgen = { version = "0.4.5" }
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
|
||||
# - Development Dependencies for `js`.
|
||||
[target.'cfg(target_arch = "wasm32")'.dev-dependencies]
|
||||
wat = "1.0"
|
||||
|
||||
@@ -3,9 +3,10 @@ use crate::js::store::{AsStoreMut, AsStoreRef, InternalStoreHandle};
|
||||
use crate::js::wasm_bindgen_polyfill::Global;
|
||||
use js_sys::Function;
|
||||
use js_sys::WebAssembly::{Memory, Table};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::fmt;
|
||||
use wasm_bindgen::{JsCast, JsValue};
|
||||
use wasmer_types::{ExternType, FunctionType, GlobalType, MemoryType, TableType};
|
||||
use wasmer_types::{ExternType, FunctionType, GlobalType, MemoryType, TableType, WASM_PAGE_SIZE};
|
||||
|
||||
/// Represents linear memory that is managed by the javascript runtime
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
@@ -17,13 +18,27 @@ pub struct VMMemory {
|
||||
unsafe impl Send for VMMemory {}
|
||||
unsafe impl Sync for VMMemory {}
|
||||
|
||||
#[derive(Serialize, Deserialize)]
|
||||
struct DummyBuffer {
|
||||
#[serde(rename = "byteLength")]
|
||||
byte_length: u32,
|
||||
}
|
||||
|
||||
impl VMMemory {
|
||||
pub(crate) fn new(memory: Memory, ty: MemoryType) -> Self {
|
||||
Self { memory, ty }
|
||||
}
|
||||
|
||||
/// Returns the size of the memory buffer in pages
|
||||
pub fn get_runtime_size(&self) -> u32 {
|
||||
self.memory.get_runtime_size()
|
||||
let dummy: DummyBuffer = match serde_wasm_bindgen::from_value(self.memory.buffer()) {
|
||||
Ok(o) => o,
|
||||
Err(_) => return 0,
|
||||
};
|
||||
if dummy.byte_length == 0 {
|
||||
return 0;
|
||||
}
|
||||
dummy.byte_length / 65536
|
||||
}
|
||||
|
||||
/// Attempts to clone this memory (if its clonable)
|
||||
@@ -61,7 +76,7 @@ impl VMTable {
|
||||
Self { table, ty }
|
||||
}
|
||||
pub fn get_runtime_size(&self) -> u32 {
|
||||
self.table.get_runtime_size()
|
||||
self.table.length()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user