浏览代码

* Allow wasm guest & host to be notified of wasm memory growth

Michaël Van Canneyt 3 月之前
父节点
当前提交
736fc12e55
共有 3 个文件被更改,包括 11 次插入1 次删除
  1. 2 0
      packages/wasm-utils/fpmake.pp
  2. 2 0
      rtl/wasicommon/sysheap.inc
  3. 7 1
      rtl/wasicommon/system.pp

+ 2 - 0
packages/wasm-utils/fpmake.pp

@@ -27,6 +27,8 @@ begin
     P.SourcePath.Add('src');
     P.SourcePath.Add('src');
     // Logger
     // Logger
     T:=P.Targets.AddUnit('wasm.logger.api.pas');
     T:=P.Targets.AddUnit('wasm.logger.api.pas');
+    // Memutils
+    T:=P.Targets.AddUnit('wasm.memutils.pas');
     
     
     // Timer
     // Timer
     T:=P.Targets.AddUnit('wasm.timer.shared.pas');
     T:=P.Targets.AddUnit('wasm.timer.shared.pas');

+ 2 - 0
rtl/wasicommon/sysheap.inc

@@ -71,6 +71,8 @@ begin
         end
         end
       else
       else
         SysOSAlloc:=nil;
         SysOSAlloc:=nil;
+      if assigned(WasmGrowMemoryCallback) then
+        WasmGrowMemoryCallback(grow_pages);
     end;
     end;
 {$ifdef FPC_WASM_THREADS}
 {$ifdef FPC_WASM_THREADS}
   if InitialHeapCriticalSectionInitialized then
   if InitialHeapCriticalSectionInitialized then

+ 7 - 1
rtl/wasicommon/system.pp

@@ -66,17 +66,23 @@ const
   sLineBreak = LineEnding;
   sLineBreak = LineEnding;
   DefaultTextLineBreakStyle : TTextLineBreakStyle = tlbsLF;
   DefaultTextLineBreakStyle : TTextLineBreakStyle = tlbsLF;
 
 
+type
+  TWasmGrowMemoryCallBack = procedure(aGrowPages: longint);
+
 var
 var
   argc: longint;
   argc: longint;
   argv: PPAnsiChar;
   argv: PPAnsiChar;
   envp: PPAnsiChar;
   envp: PPAnsiChar;
   ___fpc_wasm_suspender: WasmExternRef; section 'WebAssembly.Global';
   ___fpc_wasm_suspender: WasmExternRef; section 'WebAssembly.Global';
-
+  WasmGrowMemoryCallback : TWasmGrowMemoryCallBack;
+  
 function __fpc_get_wasm_suspender: WasmExternRef;
 function __fpc_get_wasm_suspender: WasmExternRef;
 procedure __fpc_set_wasm_suspender(v: WasmExternRef);
 procedure __fpc_set_wasm_suspender(v: WasmExternRef);
 
 
 property __fpc_wasm_suspender: WasmExternRef read __fpc_get_wasm_suspender write __fpc_set_wasm_suspender;
 property __fpc_wasm_suspender: WasmExternRef read __fpc_get_wasm_suspender write __fpc_set_wasm_suspender;
 
 
+
+
 Procedure DebugWriteln(aString : ShortString);
 Procedure DebugWriteln(aString : ShortString);
 
 
 implementation
 implementation