| // Copyright (C) 2026 The Android Open Source Project | |
| // | |
| // Licensed under the Apache License, Version 2.0 (the "License"); | |
| // you may not use this file except in compliance with the License. | |
| // You may obtain a copy of the License at | |
| // | |
| // http://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, software | |
| // distributed under the License is distributed on an "AS IS" BASIS, | |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| // See the License for the specific language governing permissions and | |
| // limitations under the License. | |
| // Single source of truth pairing each trace_processor emscripten module | |
| // with its .wasm asset filename. Both names come from the same wasm_lib() | |
| // GN target — keeping them on adjacent lines here makes it impossible to | |
| // rename one without updating the other. | |
| // | |
| // Imported by both the main thread (wasm_engine_proxy.ts, which fetches | |
| // and precompiles the .wasm) and the worker (wasm_bridge.ts, which calls | |
| // the module factory). | |
| // | |
| // trace_processor_32_stub is rewritten by vite to '../gen/trace_processor' | |
| // in normal builds (see vite.config.mjs); under --only-wasm-memory64 the | |
| // alias is dropped and the local file is a throwing stub. | |
| import {assetSrc} from '../base/assets'; | |
| import TraceProcessor64 from '../gen/trace_processor_memory64'; | |
| import TraceProcessor32 from './trace_processor_32_stub'; | |
| export {TraceProcessor64, TraceProcessor32}; | |
| let memory64SupportCache: boolean | undefined; | |
| // Whether the current environment supports the WebAssembly memory64 proposal. | |
| // The main thread calls this to pick the .wasm to fetch; the worker calls it | |
| // to pick the matching factory — both run the same check against the same JS | |
| // engine, so they agree without needing to forward a flag. | |
| export function memory64Supported(): boolean { | |
| if (memory64SupportCache !== undefined) return memory64SupportCache; | |
| // Compiled bytes for `(module (memory i64 0))`. | |
| const program = new Uint8Array([ | |
| 0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x05, 0x03, 0x01, 0x04, | |
| 0x00, 0x00, 0x08, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x02, 0x01, 0x00, | |
| ]); | |
| try { | |
| new WebAssembly.Module(program); | |
| return (memory64SupportCache = true); | |
| } catch { | |
| return (memory64SupportCache = false); | |
| } | |
| } | |
| // Resolved URL of the .wasm matching the factory we'd pick for this env. | |
| export function traceProcessorWasmUrl(): string { | |
| return assetSrc( | |
| memory64Supported() | |
| ? 'trace_processor_memory64.wasm' | |
| : 'trace_processor.wasm', | |
| ); | |
| } |