brendan-duncan / webgpu_inspector

Inspection debugger for WebGPU
MIT License
155 stars 4 forks source link

Some workers are created with the wrong urls #17

Open jespertheend opened 1 month ago

jespertheend commented 1 month ago

One of my applications creates a worker using something like this:

const workerUrl = new URL("./assets/worker/main.js", import.meta.url);
const worker = new Worker(workerUrl.href, { type: "module" });

Normally this works fine and the url resolves to http://localhost:8080/client/src/assets/worker/main.js. But once I start inspecting, workerUrl.href is turned into blob://http://localhost:8080/./assets/worker/main.js and the creation of the worker fails.

This particular worker doesn't touch WebGPU so I wouldn't mind if this particular worker wasn't intercepted.

brendan-duncan commented 1 month ago

Yeah, sorry, in order to inspect workers that do use WebGPU it has to intercept all workers. Normally it does this without issue, but the interception process interferes with paths. The compensate for that it tries to fix up paths. Obviously it's failing in this case. I'll investigate as soon as I get a chance.

brendan-duncan commented 1 month ago

I finally have a chance to look into this.

Can you let me know how you have your files laid out, or even a repo? I'm trying to make a repo myself but not having much success.

Also, are you using the Trusted Types API (https://developer.mozilla.org/en-US/docs/Web/API/Trusted_Types_API)?

jespertheend commented 1 month ago

Thanks for looking into this!

I'm not using the Trusted Types API. I don't have a public repo unfortunately. The bug seems to be reproducible on https://pelicanparty.games/ferry but it's all heavily minified so I'll try to get a reduced test case going.

jespertheend commented 1 month ago

Ok well this makes a lot of sense now. I'm using a polyfill to make new Worker('..', {type:'module'}) work. When I remove it, it fixes this particular error.

I made a reduced test case on https://webgpu-inspector-with-module-worker-polyfill.glitch.me in case you want to fix it. But I reckon this is pretty uncommon and in my case I can easily work around the issue by disabling the polyfill. Which I probably should do anyway since it's now supported in all browsers.

I am running into another issue though, but I'll create a new ticket for that. Feel free to close this if you like.

brendan-duncan commented 1 month ago

Thanks for the extra info and the repo! I'll definitely be looking into it. I was sure there would be cases where the hacky module interception and path fixing would break, and it's good to find an example.

I'll look at the fetch issue too, which is really the same issue but another good example of it. Might take a couple days, trying to catch up with work after some vacation.