<!DOCTYPE html><!-- webkit-test-runner [ IPCTestingAPIEnabled=true ] -->
<script>
    window.onerror = (e) => {
        $vm.print(e);
    };

    window.testRunner?.dumpAsText();
    window.testRunner?.waitUntilDone();
    if (window.IPC) {
        import('./coreipc.js').then(({
            CoreIPC
        }) => {
            const identifier = 10;
            CoreIPC.GPU.RemoteSampleBufferDisplayLayerManager.CreateLayer(0, {
                id: identifier,
                hideRootLayer: false,
                size: {
                    width: 100,
                    height: 100
                },
                shouldMaintainAspectRatio: false,
                canShowWhileLocked: true
            }, (r) => {
                let d = 0;
                for (let z = 0; z < 5; z++) {
                    setTimeout(() => {
                        for (let x = 0; x < 32 * 25; x++) {
                            CoreIPC.GPU.RemoteSampleBufferDisplayLayer.EnqueueVideoFrame(identifier, {
                                frame: {
                                    time: {
                                        timeValue: 0x100000000,
                                        timeScale: 1,
                                        timeFlags: 0
                                    },
                                    mirrored: true,
                                    rotation: 0,
                                    buffer: {
                                        alias: {
                                            variantType: 'WebCore::IntSize',
                                            variant: {
                                                width: 100,
                                                height: 100
                                            }
                                        }
                                    }
                                }
                            });
                            CoreIPC.GPU.RemoteSampleBufferDisplayLayer.SetLogIdentifier(identifier, {
                                logIdentifier: "A".repeat(8192*64)
                            });
                        }
                    }, 500);
                }
                setTimeout(() => { window.testRunner?.notifyDone() }, 3000);
            });
        });
    } else {
        window.testRunner?.notifyDone();
    }
</script>
<body>
    <p>This test passes if WebKit does not crash.</p>
</body>

