Как получить кеш рендеринга QWebEngine? - PullRequest
0 голосов
/ 22 апреля 2020

Рендеринг без графического процессора * В ряде случаев ios мы отключаем использование графического процессора (например, при использовании ANGLE на Windows или если известно, что у драйвера OpenGL есть проблемы). В этом случае поток графического процессора будет вообще не инициализироваться, и процессы рендерера будут использовать программный растеризатор Skia для генерации растровых изображений, которые копируются в процесс браузера с использованием общей памяти. В этом случае Qt WebEngine создаст копии этих растровых изображений и использует их для генерации QImages, которые затем используется для создания QSGTexture. Это происходит во время создания узлов графа сцены в DelegatedFrameNode :: commit. Код, который выполняет фактическое копирование, можно найти в ResourceHolder :: initTexture.

Где интерфейс кодирования рендеринга Qt и Chromium напрямую? RenderWidgetHostView :: OnSwapCompositorFrame Этот метод вызывается Chromium, когда создается новый кадр, и его необходимо заменить на отображаемый в данный момент. Он копирует данные для отображаемого кадра и запускает обновление DelegatedFrameNode графом сцены.

GLSurfaceQt Эти классы являются производными от класса Chromium GLSurface и заключают в себе заданные c части платформы для используемой реализации GL, например GLX в Linux / X11 или WGL в Windows. Успешная инициализация платформы GLSurface является частью последовательности запуска Chromium.Later, экземпляры GLSurfaceQt создаются GPUChannelManager в потоке GPU для создания внеэкранных поверхностей для потока GPU для рендеринга при декодировании и выполнении потоковых команд GL.

QtShareGLContext Чтобы иметь возможность Для совместного использования ресурсов OpenGL между различными потоками контексты, используемые для выдачи команд GL, должны создаваться с использованием контекста, обеспечивающего совместное использование ресурсов. Это концепция GLShareGroup, которая отслеживает все инициализированные контексты, которые совместно используют одно и то же пространство имен идентификатора ресурса. Класс Qt WebEngine ShareGroupQtQuick является производным от этого и гарантирует, что совместное использование ресурсов также включено на стороне Qt. Оно также будет использоваться для предоставить экземпляр класса QtShareGLContext, который происходит от класса Chromium gl :: GLContext. Этот контекст будет использоваться только для предоставления дескриптора собственного контекста для создания других контекстов GL, которые находятся в той же группе общих ресурсов и, следовательно, могут обращаться к тем же ресурсам.

...