Signatur
Beschreibung
Der Konstruktor GPUUncapturedErrorEvent() erzeugt ein Ereignisobjekt vom Typ GPUUncapturedErrorEvent. Solche Ereignisse löst der Browser normalerweise selbst auf einem GPUDevice aus, wenn ein Validierungs-, Speicher- oder interner Fehler auftritt, der nicht von einem Fehlerbereich aus pushErrorScope()/popErrorScope() abgefangen wurde.
Den Konstruktor selbst ruft man nur selten auf. Nützlich ist er vor allem in Tests, beim Nachbilden (Mocking) von Fehlerpfaden oder wenn eine eigene Abstraktionsschicht Fehler über dieselbe Ereignisschnittstelle weitergeben will. Das erzeugte Ereignis lässt sich mit dispatchEvent() auf einem beliebigen EventTarget auslösen, auch auf einem GPUDevice.
Das Pflichtfeld error im Optionsobjekt muss eine Instanz von GPUError oder einer Unterklasse sein (GPUValidationError, GPUOutOfMemoryError, GPUInternalError). Über die schreibgeschützte Eigenschaft event.error kommt man später wieder an dieses Objekt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $type Pflicht | string | Name des Ereignisses. Groß- und Kleinschreibung zählen. Der Browser nutzt immer "uncapturederror". |
|
| $options Pflicht | GPUUncapturedErrorEventInit | Objekt mit dem Pflichtfeld error (GPUError) und zusätzlich den üblichen EventInit-Feldern bubbles, cancelable und composed (Standard jeweils false). |
Rückgabewert
error verweist auf das übergebene GPUError-Objekt.Beispiele
Ereignis manuell erzeugen und auslesen
const error = new GPUValidationError('Ungültiger Bind-Group-Layout');
const event = new GPUUncapturedErrorEvent('uncapturederror', { error });
console.log(event.type);
console.log(event.error instanceof GPUValidationError);
console.log(event.error.message);
Fehlerbehandlung eines GPUDevice testen
const adapter = await navigator.gpu?.requestAdapter();
if (!adapter) throw new Error('WebGPU nicht verfügbar');
const device = await adapter.requestDevice();
const logged = [];
device.addEventListener('uncapturederror', (e) => {
logged.push(`${e.error.constructor.name}: ${e.error.message}`);
});
// Fehler künstlich auslösen, um den Handler zu prüfen
device.dispatchEvent(new GPUUncapturedErrorEvent('uncapturederror', {
error: new GPUOutOfMemoryError('Simulierter Speichermangel')
}));
console.log(logged);
Echten nicht abgefangenen Fehler über die on-Property beobachten
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
device.onuncapturederror = (event) => {
console.warn('WebGPU-Fehler:', event.error.message);
};
// Ungültige Verwendung: Puffergröße nicht durch 4 teilbar bei MAP_WRITE+COPY_SRC ist ok,
// aber usage 0 ist ungültig und löst einen Validierungsfehler aus
device.createBuffer({ size: 16, usage: 0 });
// Wichtig · Fallstricke
- Das Optionsobjekt ist Pflicht. Fehlen
optionsoderoptions.error, wirft der Konstruktor einenTypeError. - Ein selbst ausgelöstes Ereignis hat
isTrusted === false. Code, der das prüft, kann es daher von echten Browser-Fehlern unterscheiden. - Fehler, die in einem Fehlerbereich (
pushErrorScope()) abgefangen werden, lösen keinuncapturederroraus. Sie kommen über das Promise vonpopErrorScope()zurück. - Ohne registrierten Handler geben Browser nicht abgefangene Fehler meist nur in der Konsole aus. Ab einer bestimmten Anzahl von Fehlern werden die Meldungen dort teilweise unterdrückt.
- Kompatibilität: WebGPU gibt es nur in sicheren Kontexten (HTTPS). Die Unterstützung ist noch nicht in allen Browsern und auf allen Plattformen vollständig. Prüfe deshalb vorher mit
'gpu' in navigatorbzw.typeof GPUUncapturedErrorEvent !== 'undefined', ob die API verfügbar ist.