globalThis.window ??= globalThis;
globalThis.navigator ??= {};
if (!globalThis.navigator.languages) {
globalThis.navigator.languages = ['en-US', 'en'];
globalThis.navigator.userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36';
globalThis.navigator.platform = "MacIntel";
}
globalThis.isSecureContext = false;
globalThis.gc = () => {
}
class URL {
href;
constructor(url, base) {
this.href = url;
}
}
globalThis.URL = URL;
let preload = { };
const originalFetch = globalThis.fetch ?? function(url) {
throw new Error("no fetch available");
}
globalThis.fetch = async function(url) {
if (preload[url]) {
return {
ok: true,
status: 200,
arrayBuffer() { return preload[url]; },
async blob() {
return {
size: preload[url].byteLength,
async arrayBuffer() { return preload[url]; }
}
},
};
}
return originalFetch(url);
};
globalThis.WebAssembly.instantiateStreaming = async function(m,i) {
return WebAssembly.instantiate((await m).arrayBuffer(),i);
};
const originalSetTimeout = setTimeout;
globalThis.setTimeout = function(f, delayMs) {
if (delayMs === 16) return;
if (delayMs !== 0) {
throw new Error('Unexpected delay for setTimeout polyfill: ' + delayMs);
}
originalSetTimeout(f);
}
globalThis.skipFunMain = true;
delete globalThis.d8;
delete globalThis.inIon;
delete globalThis.jscOptions;
class Benchmark {
skikoInstantiate;
mainInstantiate;
wasmInstanceExports;
async init() {
preload = {
'skiko.wasm': await JetStream.getBinary(JetStream.preload.skikoWasmBinary),
'./compose-benchmarks-benchmarks.wasm': await JetStream.getBinary(JetStream.preload.composeWasmBinary),
'./composeResources/compose_benchmarks.benchmarks.generated.resources/drawable/compose-multiplatform.png': await JetStream.getBinary(JetStream.preload.inputImageCompose),
'./composeResources/compose_benchmarks.benchmarks.generated.resources/drawable/example1_cat.jpg': await JetStream.getBinary(JetStream.preload.inputImageCat),
'./composeResources/compose_benchmarks.benchmarks.generated.resources/files/example1_compose-community-primary.png': await JetStream.getBinary(JetStream.preload.inputImageComposeCommunity),
'./composeResources/compose_benchmarks.benchmarks.generated.resources/font/jetbrainsmono_italic.ttf': await JetStream.getBinary(JetStream.preload.inputFontItalic),
'./composeResources/compose_benchmarks.benchmarks.generated.resources/font/jetbrainsmono_regular.ttf': await JetStream.getBinary(JetStream.preload.inputFontRegular),
};
this.skikoInstantiate = (await JetStream.dynamicImport(JetStream.preload.skikoJsModule)).default;
this.mainInstantiate = (await JetStream.dynamicImport(JetStream.preload.composeJsModule)).instantiate;
}
async runIteration() {
if (!this.wasmInstanceExports) {
const skikoExports = (await this.skikoInstantiate()).wasmExports;
this.wasmInstanceExports = (await this.mainInstantiate({ './skiko.mjs': skikoExports })).exports;
}
const frameCountFactor = 5;
await this.wasmInstanceExports.customLaunch("AnimatedVisibility", 100 * frameCountFactor);
await this.wasmInstanceExports.customLaunch("LazyGrid", 1 * frameCountFactor);
await this.wasmInstanceExports.customLaunch("LazyGrid-ItemLaunchedEffect", 1 * frameCountFactor);
await this.wasmInstanceExports.customLaunch("LazyGrid-SmoothScroll", 5 * frameCountFactor);
await this.wasmInstanceExports.customLaunch("LazyGrid-SmoothScroll-ItemLaunchedEffect", 5 * frameCountFactor);
await this.wasmInstanceExports.customLaunch("VisualEffects", 1 * frameCountFactor);
await this.wasmInstanceExports.customLaunch("MultipleComponents-NoVectorGraphics", 10 * frameCountFactor);
}
}