Remove some allocations in CodeMemory (#3253)
* Remove some allocations in `CodeMemory` This commit removes the `FinishedFunctions` type as well as allocations associated with trampolines when allocating inside of a `CodeMemory`. The main goal of this commit is to improve the time spent in `CodeMemory` where currently today a good portion of time is spent simply parsing symbol names and trying to extract function indices from them. Instead this commit implements a new strategy (different from #3236) where compilation records offset/length information for all functions/trampolines so this doesn't need to be re-learned from the object file later. A consequence of this commit is that this offset information will be decoded/encoded through `bincode` unconditionally, but we can also optimize that later if necessary as well. Internally this involved quite a bit of refactoring since the previous map for `FinishedFunctions` was relatively heavily relied upon. * comments
This commit is contained in:
@@ -17,7 +17,7 @@ use wasmtime_environ::{
|
||||
};
|
||||
use wasmtime_environ::{
|
||||
DefinedFuncIndex, DefinedGlobalIndex, DefinedMemoryIndex, DefinedTableIndex, FuncIndex,
|
||||
GlobalIndex, MemoryIndex, TableIndex, TypeIndex, WasmFuncType,
|
||||
GlobalIndex, MemoryIndex, TableIndex, Trampoline, TypeIndex, WasmFuncType,
|
||||
};
|
||||
|
||||
/// A compiler that compiles a WebAssembly module with Lightbeam, directly translating the Wasm file.
|
||||
@@ -86,7 +86,7 @@ impl Compiler for Lightbeam {
|
||||
_funcs: PrimaryMap<DefinedFuncIndex, Box<dyn Any + Send>>,
|
||||
_emit_dwarf: bool,
|
||||
_obj: &mut Object,
|
||||
) -> Result<PrimaryMap<DefinedFuncIndex, FunctionInfo>> {
|
||||
) -> Result<(PrimaryMap<DefinedFuncIndex, FunctionInfo>, Vec<Trampoline>)> {
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
@@ -95,7 +95,7 @@ impl Compiler for Lightbeam {
|
||||
_ty: &WasmFuncType,
|
||||
_host_fn: usize,
|
||||
_obj: &mut Object,
|
||||
) -> Result<()> {
|
||||
) -> Result<(Trampoline, Trampoline)> {
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user