Fix deno_webgpu & cts_runner (#5459)

* fix cts_runner

* fix
This commit is contained in:
Leo Kettmeir 2024-04-01 09:39:02 -07:00 committed by GitHub
parent ed7d9de439
commit c2fb18afb8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 105 additions and 81 deletions

90
Cargo.lock generated
View File

@ -708,6 +708,12 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
[[package]]
name = "cooked-waker"
version = "5.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "147be55d677052dabc6b22252d5dd0fd4c29c8c27aa4f2fbef0f94aa003b406f"
[[package]]
name = "core-foundation"
version = "0.9.4"
@ -970,26 +976,32 @@ dependencies = [
[[package]]
name = "deno_console"
version = "0.125.0"
version = "0.143.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "92543d4f4d82f2350123bd4b60e97a73aba1a9bbca8c931e827459096dedabba"
checksum = "1f770d8deb0eb0bfd596d242d9eaef5312ef57f0130964cb53c7f6a8107d13be"
dependencies = [
"deno_core",
]
[[package]]
name = "deno_core"
version = "0.232.0"
version = "0.272.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "229ffd108e028b148a1a5a6122f771bc7c37094170226f44b8b93b3a9b79d114"
checksum = "07093891f2af763023614cfe2d1ce5f9ce5a7920c4fcf2f00911bd0d93083523"
dependencies = [
"anyhow",
"bincode",
"bit-set",
"bit-vec",
"bytes",
"cooked-waker",
"deno_core_icudata",
"deno_ops",
"deno_unsync",
"futures",
"libc",
"log",
"memoffset 0.9.1",
"parking_lot",
"pin-project",
"serde",
@ -997,16 +1009,23 @@ dependencies = [
"serde_v8",
"smallvec",
"sourcemap",
"static_assertions",
"tokio",
"url",
"v8",
]
[[package]]
name = "deno_ops"
version = "0.108.0"
name = "deno_core_icudata"
version = "0.0.73"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7dde627916f8539f3f0d2e754dda40810c8ca4d655f2eaac1ef54785a12fd27"
checksum = "a13951ea98c0a4c372f162d669193b4c9d991512de9f2381dd161027f34b26b1"
[[package]]
name = "deno_ops"
version = "0.148.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5bc73fc07ad26e71715d5a726d1dd228587c0d121a591b1931a0fcf958a2ec3b"
dependencies = [
"proc-macro-rules",
"proc-macro2",
@ -1028,9 +1047,9 @@ dependencies = [
[[package]]
name = "deno_url"
version = "0.125.0"
version = "0.143.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "25ec92af225230fe4a429de0b5891f35b1ba5f143f8c1605bb7b9d1cb767ac73"
checksum = "39d9e6ffd6a7157bfd3cf1385c59232e49587c9bbb898e64010f7f082242a203"
dependencies = [
"deno_core",
"serde",
@ -1039,9 +1058,9 @@ dependencies = [
[[package]]
name = "deno_web"
version = "0.156.0"
version = "0.174.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3aeef7522f46b3442e24a750ef914ca54aade2110d6540a66e4ea17b4eb68bb7"
checksum = "708666b5b346e6880c1372006615814db7fc5ef36bd1785f0b0e4f8617082999"
dependencies = [
"async-trait",
"base64-simd 0.8.0",
@ -1071,9 +1090,9 @@ dependencies = [
[[package]]
name = "deno_webidl"
version = "0.125.0"
version = "0.143.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74b1a86e9a1dec0dc5d4dc132faee72ac50297f41e30f7cab57dd52dda380eed"
checksum = "bddad93aa68e3c3c2d36976cd401af27a6ce750c23060e02401daf240f2acbe2"
dependencies = [
"deno_core",
]
@ -1381,9 +1400,9 @@ dependencies = [
[[package]]
name = "fslock"
version = "0.1.8"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57eafdd0c16f57161105ae1b98a1238f97645f2f588438b2949c99a2af9616bf"
checksum = "04412b8935272e3a9bae6f48c7bfff74c2911f60525404edfdd28e49884c3bfb"
dependencies = [
"libc",
"winapi",
@ -1675,6 +1694,15 @@ dependencies = [
"bitflags 2.4.2",
]
[[package]]
name = "gzip-header"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95cc527b92e6029a62960ad99aa8a6660faa4555fe5f731aab13aa6a921795a2"
dependencies = [
"crc32fast",
]
[[package]]
name = "half"
version = "2.4.0"
@ -2048,6 +2076,15 @@ dependencies = [
"autocfg",
]
[[package]]
name = "memoffset"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
dependencies = [
"autocfg",
]
[[package]]
name = "metal"
version = "0.27.0"
@ -2251,7 +2288,7 @@ dependencies = [
"bitflags 1.3.2",
"cfg-if",
"libc",
"memoffset",
"memoffset 0.6.5",
]
[[package]]
@ -2264,7 +2301,7 @@ dependencies = [
"bitflags 1.3.2",
"cfg-if",
"libc",
"memoffset",
"memoffset 0.6.5",
]
[[package]]
@ -3057,12 +3094,11 @@ dependencies = [
[[package]]
name = "serde_v8"
version = "0.141.0"
version = "0.181.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bc689cb316d67b200e9f7449ce76cceb7e483e0f828d1a9c3d057c4367b6c26e"
checksum = "fd25bb66a20a1a405fb3733aaaf8a8a77a14fd55c8f5fd9db2a2e95bbd7eeab9"
dependencies = [
"bytes",
"derive_more",
"num-bigint",
"serde",
"smallvec",
@ -3656,12 +3692,15 @@ dependencies = [
[[package]]
name = "v8"
version = "0.81.0"
version = "0.89.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b75f5f378b9b54aff3b10da8170d26af4cfd217f644cf671badcd13af5db4beb"
checksum = "fe2197fbef82c98f7953d13568a961d4e1c663793b5caf3c74455a13918cdf33"
dependencies = [
"bitflags 1.3.2",
"bitflags 2.4.2",
"fslock",
"gzip-header",
"home",
"miniz_oxide",
"once_cell",
"which",
]
@ -4209,14 +4248,15 @@ dependencies = [
[[package]]
name = "which"
version = "4.4.2"
version = "5.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7"
checksum = "9bf3ea8596f3a0dd5980b46430f2058dfe2c36a27ccfbb1845d6fbfcd9ba6e14"
dependencies = [
"either",
"home",
"once_cell",
"rustix",
"windows-sys 0.48.0",
]
[[package]]

View File

@ -165,11 +165,11 @@ web-sys = "0.3.69"
web-time = "0.2.4"
# deno dependencies
deno_console = "0.125.0"
deno_core = "0.232.0"
deno_url = "0.125.0"
deno_web = "0.156.0"
deno_webidl = "0.125.0"
deno_console = "0.143.0"
deno_core = "0.272.0"
deno_url = "0.143.0"
deno_web = "0.174.0"
deno_webidl = "0.143.0"
deno_webgpu = { version = "0.85.0", path = "./deno_webgpu" }
tokio = "1.36.0"
termcolor = "1.4.1"

View File

@ -5,8 +5,7 @@
//
delete Object.prototype.__proto__;
const core = Deno.core;
const primordials = globalThis.__bootstrap.primordials;
import { core, primordials } from "ext:core/mod.js";
const {
Error,
ObjectDefineProperty,
@ -25,9 +24,10 @@ import * as base64 from "ext:deno_web/05_base64.js";
import * as encoding from "ext:deno_web/08_text_encoding.js";
import { Console } from "ext:deno_console/01_console.js";
import * as url from "ext:deno_url/00_url.js";
import DOMException from "ext:deno_web/01_dom_exception.js";
import { DOMException } from "ext:deno_web/01_dom_exception.js";
import * as performance from "ext:deno_web/15_performance.js";
import * as webgpu from "ext:deno_webgpu/01_webgpu.js";
import * as imageData from "ext:deno_web/16_image_data.js";
// imports needed to pass module evaluation
import "ext:deno_url/01_urlpattern.js";
@ -42,8 +42,6 @@ import "ext:deno_web/14_compression.js";
let globalThis_;
const { BadResource, Interrupted } = core;
class NotFound extends Error {
constructor(msg) {
super(msg);
@ -183,6 +181,7 @@ const windowOrWorkerGlobalScope = {
clearInterval: util.writable(timers.clearInterval),
clearTimeout: util.writable(timers.clearTimeout),
performance: util.writable(performance.performance),
ImageData: core.propNonEnumerable(imageData.ImageData),
GPU: util.nonEnumerable(webgpu.GPU),
GPUAdapter: util.nonEnumerable(webgpu.GPUAdapter),
@ -248,10 +247,8 @@ core.registerErrorClass("NotFound", NotFound);
core.registerErrorClass("AlreadyExists", AlreadyExists);
core.registerErrorClass("InvalidData", InvalidData);
core.registerErrorClass("TimedOut", TimedOut);
core.registerErrorClass("Interrupted", Interrupted);
core.registerErrorClass("WriteZero", WriteZero);
core.registerErrorClass("UnexpectedEof", UnexpectedEof);
core.registerErrorClass("BadResource", BadResource);
core.registerErrorClass("NotSupported", NotSupported);
core.registerErrorBuilder(
"DOMExceptionOperationError",

View File

@ -45,13 +45,13 @@ mod native {
],
..Default::default()
};
let mut isolate = JsRuntime::new(options);
let mut js_runtime = JsRuntime::new(options);
let args = args_iter.collect::<Vec<String>>();
let cfg = json!({"args": args, "cwd": env::current_dir().unwrap().to_string_lossy() });
{
let context = isolate.main_context();
let scope = &mut isolate.handle_scope();
let context = js_runtime.main_context();
let scope = &mut js_runtime.handle_scope();
let context_local = v8::Local::new(scope, context);
let global_obj = context_local.global(scope);
let bootstrap_str = v8::String::new(scope, "bootstrap").unwrap();
@ -65,20 +65,12 @@ mod native {
.unwrap();
}
isolate.op_state().borrow_mut().put(Permissions {});
js_runtime.op_state().borrow_mut().put(Permissions {});
let mod_id = isolate.load_main_module(&specifier, None).await?;
let mod_rx = isolate.mod_evaluate(mod_id);
let rx = tokio::spawn(async move {
match mod_rx.await {
Ok(err @ Err(_)) => err,
_ => Ok(()),
}
});
isolate.run_event_loop(false).await?;
rx.await.unwrap()?;
let mod_id = js_runtime.load_main_es_module(&specifier).await?;
let result = js_runtime.mod_evaluate(mod_id);
js_runtime.run_event_loop(Default::default()).await?;
result.await?;
Ok(())
}
@ -87,7 +79,7 @@ mod native {
cts_runner,
deps = [deno_webidl, deno_web],
ops = [op_exit, op_read_file_sync, op_write_file_sync],
esm_entry_point = "ext:cts_runner/bootstrap.js",
esm_entry_point = "ext:cts_runner/src/bootstrap.js",
esm = ["src/bootstrap.js"],
);

View File

@ -6,12 +6,11 @@
/// <reference path="../web/lib.deno_web.d.ts" />
/// <reference path="./lib.deno_webgpu.d.ts" />
const core = globalThis.Deno.core;
const ops = core.ops;
const primordials = globalThis.__bootstrap.primordials;
import { core, primordials } from "ext:core/mod.js";
import * as ops from "ext:core/ops";
import * as webidl from "ext:deno_webidl/00_webidl.js";
import { EventTarget } from "ext:deno_web/02_event.js";
import DOMException from "ext:deno_web/01_dom_exception.js";
import { DOMException } from "ext:deno_web/01_dom_exception.js";
import { createFilteredInspectProxy } from "ext:deno_console/01_console.js";
const {
ArrayBuffer,
@ -247,8 +246,7 @@ class GPU {
"Argument 1",
);
const { err, ...data } = await core.opAsync(
"op_webgpu_request_adapter",
const { err, ...data } = await ops.op_webgpu_request_adapter(
options.powerPreference,
options.forceFallbackAdapter,
);
@ -338,8 +336,7 @@ class GPUAdapter {
}
}
const { rid, features, limits } = await core.opAsync(
"op_webgpu_request_device",
const { rid, features, limits } = await ops.op_webgpu_request_device(
this[_adapter].rid,
descriptor.label,
requiredFeatures,
@ -377,10 +374,7 @@ class GPUAdapter {
architecture,
device,
description,
} = await core.opAsync(
"op_webgpu_request_adapter_info",
this[_adapter].rid,
);
} = await ops.op_webgpu_request_adapter_info(this[_adapter].rid);
const adapterInfo = webidl.createBranded(GPUAdapterInfo);
adapterInfo[_vendor] = unmaskHints.includes("vendor") ? vendor : "";
@ -677,6 +671,7 @@ class GPUSupportedFeatures {
constructor() {
webidl.illegalConstructor();
}
[SymbolFor("Deno.privateCustomInspect")](inspect, inspectOptions) {
if (ObjectPrototypeIsPrototypeOf(GPUSupportedFeaturesPrototype, this)) {
return `${this.constructor.name} ${
@ -687,23 +682,23 @@ class GPUSupportedFeatures {
return `${this.constructor.name} ${inspect({}, inspectOptions)}`;
}
}
}
const GPUSupportedFeaturesPrototype = GPUSupportedFeatures.prototype;
const GPUSupportedFeaturesPrototype = GPUSupportedFeatures.prototype;
/**
* @param {string | undefined} reason
* @param {string} message
* @returns {GPUDeviceLostInfo}
*/
function createGPUDeviceLostInfo(reason, message) {
/** @type {GPUDeviceLostInfo} */
const deviceLostInfo = webidl.createBranded(GPUDeviceLostInfo);
deviceLostInfo[_reason] = reason ?? "unknown";
deviceLostInfo[_message] = message;
return deviceLostInfo;
}
/**
* @param {string | undefined} reason
* @param {string} message
* @returns {GPUDeviceLostInfo}
*/
function createGPUDeviceLostInfo(reason, message) {
/** @type {GPUDeviceLostInfo} */
const deviceLostInfo = webidl.createBranded(GPUDeviceLostInfo);
deviceLostInfo[_reason] = reason ?? "unknown";
deviceLostInfo[_message] = message;
return deviceLostInfo;
}
class GPUDeviceLostInfo {
class GPUDeviceLostInfo {
/** @type {string} */
[_reason];
/** @type {string} */