Cache immutable Wasm server configuration encoding
This commit is contained in:
+17
-5
@@ -68,10 +68,10 @@ static String wasm_backend_ensure_started(Request* context)
|
||||
}
|
||||
|
||||
g_wasm_worker = new WasmWorker(wc);
|
||||
// Server configuration is finalized before render workers start. Retain one
|
||||
// native tree so per-request UCEB encoding can reference it without rebuilding
|
||||
// dozens of identical nodes; the guest still decodes it into fresh state.
|
||||
// Server configuration is finalized before render workers start. Encode it
|
||||
// once; each fresh guest decodes the cached flat map into its own Server.
|
||||
g_wasm_worker->server_config_context = cfg;
|
||||
g_wasm_worker->server_config_encoded = ucb_encode(g_wasm_worker->server_config_context);
|
||||
g_wasm_init_error = g_wasm_worker->init();
|
||||
if(g_wasm_init_error == "")
|
||||
g_wasm_init_error = wasm_worker_prepare(*g_wasm_worker);
|
||||
@@ -159,8 +159,6 @@ String wasm_backend_serve(Request& request, const String& entry_unit, const Stri
|
||||
for(auto& entry : source)
|
||||
ctx[key][entry.first] = entry.second;
|
||||
};
|
||||
if(request.server)
|
||||
ctx["server_config"].set_reference(&g_wasm_worker->server_config_context);
|
||||
copy_map(request.params, "params");
|
||||
copy_map(request.get, "get");
|
||||
copy_map(request.post, "post");
|
||||
@@ -240,7 +238,21 @@ String wasm_backend_serve(Request& request, const String& entry_unit, const Stri
|
||||
if(to_bool(request.server->config["WASM_BACKEND_VERBOSE"], false))
|
||||
{
|
||||
request.header["X-UCE-Backend"] = "wasm";
|
||||
request.header["X-UCE-Wasm-Workspace-Setup-Us"] = std::to_string(response.workspace_setup_us);
|
||||
request.header["X-UCE-Wasm-Workspace-Birth-Us"] = std::to_string(response.workspace_birth_us);
|
||||
request.header["X-UCE-Wasm-Birth-Policy-Us"] = std::to_string(response.birth_policy_us);
|
||||
request.header["X-UCE-Wasm-Birth-Import-Us"] = std::to_string(response.birth_import_us);
|
||||
request.header["X-UCE-Wasm-Birth-Instantiate-Us"] = std::to_string(response.birth_instantiate_us);
|
||||
request.header["X-UCE-Wasm-Birth-Exports-Us"] = std::to_string(response.birth_exports_us);
|
||||
request.header["X-UCE-Wasm-Birth-Initialize-Us"] = std::to_string(response.birth_initialize_us);
|
||||
request.header["X-UCE-Wasm-Context-Apply-Us"] = std::to_string(response.context_apply_us);
|
||||
request.header["X-UCE-Wasm-Context-Bytes"] = std::to_string(response.context_bytes);
|
||||
request.header["X-UCE-Wasm-Server-Config-Bytes"] = std::to_string(response.server_config_bytes);
|
||||
request.header["X-UCE-Wasm-Context-Encode-Us"] = std::to_string(response.context_encode_us);
|
||||
request.header["X-UCE-Wasm-Context-Allocate-Us"] = std::to_string(response.context_allocate_us);
|
||||
request.header["X-UCE-Wasm-Context-Write-Us"] = std::to_string(response.context_write_us);
|
||||
request.header["X-UCE-Wasm-Context-Guest-Apply-Us"] = std::to_string(response.context_guest_apply_us);
|
||||
request.header["X-UCE-Wasm-Context-Free-Us"] = std::to_string(response.context_free_us);
|
||||
request.header["X-UCE-Wasm-Workspace-Complete-Us"] = std::to_string(response.workspace_complete_us);
|
||||
request.header["X-UCE-Wasm-Entry-Invoke-Us"] = std::to_string(response.entry_invoke_us);
|
||||
request.header["X-UCE-Wasm-Entry-Load-Us"] = std::to_string(response.entry_load_us);
|
||||
|
||||
Reference in New Issue
Block a user