Issue Description
I am attempting to profile a WebGPU renderer in Google Chrome using the Nsight Graphics GPU Trace Profiler. However, Nsight Graphics fails to detect and attach to the Chrome process after launch, preventing profiling.
Despite following the known procedure and ensuring all prerequisites are met, the tool cannot find the target process.
Chrome should start normally now, but Nsight Graphics will report “Launch process exited”, and I can’t find the pid mentioned by Nsight Graphics in my task manager (please see the image above).
Troubleshooting Performed
I have extensively tested potential causes:
Simplified Configuration: Tested with a minimal set of arguments and even with a clean Chrome & Nsight Graphics installation with no extra arguments. The issue persists.
Manual Attach: Set “Automatically Connect” to “NO”, and tried manually selecting process from the “Attach” Tab.
However, the process table under “Attach” Tab was empty.
System Reboot: Performed multiple system reboots, ensuring no background processes of chrome exist beforehand.
Chrome Version Analysis: Seemingly version-dependent, but I don’t fine any related issues on the Internet.
Chrome 133 - 138: Works as expected (i.e. Nsight can correctly attach to the chrome process).
Chrome 138+ (including 141): Fails with the described error.
The evidence suggests that a change in Chrome’s process management after version ~138 causes the initial process to terminate and spawn a new process with a different pid?
My application requires features from newer Chrome versions, so downgrading is not a viable solution. Could the NVIDIA team please investigate the compatibility between Nsight Graphics 2025.4.1 and Chrome versions 138 and newer?
Thank you for using Nsight Graphics and providing us with your detail feedback. I am not an expert of Chrome, but there is no difference for Nsight Graphics to support Chrome/WebGPU.
The key here is the backend of Chrome/WebGPU is D3D11 and GPUTrace doesn’t support D3D11.
You don’t need to do system reboot, just make sure no Chrome process exist in taskmgr. WRT the graphics process of Chrome, did you try to use the command line: --gpu-startup-dialog?
I confirmed that the --gpu-startup-dialog argument was used. However, in Chrome versions 138+, the PID shown in that dialog does not match the PID in the Nsight Graphics log window. This discrepancy did not occur in older Chrome versions (<138), where the PIDs matched and profiling worked correctly.
Regarding the backend: My understanding is that Chrome’s WebGPU implementation uses google/dawn: Native WebGPU implementation, which defaults to a D3D12 backend on Windows. This is consistent with the fact that I can successfully capture D3D12 API calls from my renderer using Microsoft’s PIX.
The issue was indeed elusive, but I’m thrilled to share that I have some new progress.
Inspired by the PID mismatch clue, I used Process Monitor to trace the process creation. The initial process launched by Nsight Graphics (PID: 11904) immediately spawns a child process (PID: 14432) and then exits. PID 14432 is the actual Chrome process we interact with.
While one might expect Nsight Graphics to automatically attach to this child process, it does not in this scenario. The key was to investigate how the child process was being launched.
By inspecting the creation parameters of the child process, I discovered that Chrome automatically appended several new command-line arguments:
I can confirm, as mentioned before, the backend is D3D12, and the “Collect GPU Trace” button indeed remained disabled until I entered the website of my renderer, that means Nsight Graphics was aware of the API. This is weird.
Thank you for your assistance in investigating this.
Do you always choose ‘Yes’ for ‘Automatically Connect’ option? What if you choose ‘No’ and manually choose the same PID as the GPU process ID dialog box, then click on the ‘Collection’ button?
When adding the command-line argument “–use-angle=vulkan” to chrome, Nsight Graphics can correctly connect to it (the connection issue has been solved above, see Nsight Graphics failed to capture for chrome - #6 by 15532) and capture the frame of a WebGL renderer.
But still don’t know why it can’t work for WebGPU / Dawn / D3D12.
p.s. More accurately, it can work for D3D12, but only for native programs (I’ve tested this) - it can’t work for D3D12 in chrome.
Have you removed the newlines between arguments? I recall (not very sure) that they won’t work correctly with newlines and you need to manually remove them (e.g. copy-paste them to a .txt file first, replace all ‘\n’ with ’ ', and copy-paste again to Nsight).