mirror of
https://github.com/mii443/wasmer.git
synced 2025-12-12 05:18:43 +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",
|
"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]]
|
[[package]]
|
||||||
name = "serde_bytes"
|
name = "serde_bytes"
|
||||||
version = "0.11.7"
|
version = "0.11.7"
|
||||||
@@ -3070,6 +3081,8 @@ dependencies = [
|
|||||||
"js-sys",
|
"js-sys",
|
||||||
"macro-wasmer-universal-test",
|
"macro-wasmer-universal-test",
|
||||||
"more-asserts",
|
"more-asserts",
|
||||||
|
"serde",
|
||||||
|
"serde-wasm-bindgen",
|
||||||
"target-lexicon 0.12.4",
|
"target-lexicon 0.12.4",
|
||||||
"tempfile",
|
"tempfile",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
|
|||||||
@@ -68,6 +68,9 @@ wasmer-derive = { path = "../derive", version = "=3.0.0-beta.2" }
|
|||||||
# - Optional dependencies for `js`.
|
# - Optional dependencies for `js`.
|
||||||
wasmparser = { version = "0.83", default-features = false, optional = true }
|
wasmparser = { version = "0.83", default-features = false, optional = true }
|
||||||
hashbrown = { version = "0.11", 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`.
|
# - Development Dependencies for `js`.
|
||||||
[target.'cfg(target_arch = "wasm32")'.dev-dependencies]
|
[target.'cfg(target_arch = "wasm32")'.dev-dependencies]
|
||||||
wat = "1.0"
|
wat = "1.0"
|
||||||
|
|||||||
@@ -3,9 +3,10 @@ use crate::js::store::{AsStoreMut, AsStoreRef, InternalStoreHandle};
|
|||||||
use crate::js::wasm_bindgen_polyfill::Global;
|
use crate::js::wasm_bindgen_polyfill::Global;
|
||||||
use js_sys::Function;
|
use js_sys::Function;
|
||||||
use js_sys::WebAssembly::{Memory, Table};
|
use js_sys::WebAssembly::{Memory, Table};
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use wasm_bindgen::{JsCast, JsValue};
|
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
|
/// Represents linear memory that is managed by the javascript runtime
|
||||||
#[derive(Clone, Debug, PartialEq)]
|
#[derive(Clone, Debug, PartialEq)]
|
||||||
@@ -17,13 +18,27 @@ pub struct VMMemory {
|
|||||||
unsafe impl Send for VMMemory {}
|
unsafe impl Send for VMMemory {}
|
||||||
unsafe impl Sync for VMMemory {}
|
unsafe impl Sync for VMMemory {}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
struct DummyBuffer {
|
||||||
|
#[serde(rename = "byteLength")]
|
||||||
|
byte_length: u32,
|
||||||
|
}
|
||||||
|
|
||||||
impl VMMemory {
|
impl VMMemory {
|
||||||
pub(crate) fn new(memory: Memory, ty: MemoryType) -> Self {
|
pub(crate) fn new(memory: Memory, ty: MemoryType) -> Self {
|
||||||
Self { memory, ty }
|
Self { memory, ty }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns the size of the memory buffer in pages
|
||||||
pub fn get_runtime_size(&self) -> u32 {
|
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)
|
/// Attempts to clone this memory (if its clonable)
|
||||||
@@ -61,7 +76,7 @@ impl VMTable {
|
|||||||
Self { table, ty }
|
Self { table, ty }
|
||||||
}
|
}
|
||||||
pub fn get_runtime_size(&self) -> u32 {
|
pub fn get_runtime_size(&self) -> u32 {
|
||||||
self.table.get_runtime_size()
|
self.table.length()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user