У нас есть родная надстройка C ++, запущенная в процессе рендеринга Electron, предоставляющая данные растрового изображения Uint8Array в JavaScript, где они рисуются на холст через textImage2D в контексте webgl или помещаютIImageData в 2D-контекст.
Uint8Array размещается в собственном дополнении и передается через обратный вызов в JS.Он не освобождается сразу после завершения обратного вызова и хранится в пуле памяти, в котором хранятся последние 10 фреймов, отправленных для доступности для асинхронного рисования.
Если массив передается как в putImageData или texImage2D,рендер полностью зависает.Если он заранее скопирован в новый TypedArray, проблем нет, но мы хотели бы избежать дополнительной операции копирования, а значит и пула памяти.
У меня такое ощущение, что замораживание связано с тем, как обрабатывает ChromiumКоманды GL через буфер команд.
Я попытался использовать следующие аргументы командной строки Chromimum, чтобы попытаться изолировать проблему, но не повезло - процесс рендеринга останавливается, если массив не был скопирован заранее):
--use-passthrough-cmd-decoder
приводит к увеличению времени рендеринга для 2d, а контекст null
для webgl --disable-gpu-sandbox
ничего не делает --in-process-gpu
ничего не делает
Есть идеи, что происходит?