void ThreadedCompositor::runCompositingThread() { { LockHolder locker(m_initializeRunLoopConditionLock); m_compositingRunLoop = std::make_unique<CompositingRunLoop>([&] { renderLayerTree(); }); m_scene = adoptRef(new CoordinatedGraphicsScene(this)); m_viewportController = std::make_unique<SimpleViewportController>(this); m_initializeRunLoopCondition.notifyOne(); } m_compositingRunLoop->runLoop().run(); m_compositingRunLoop->stopUpdates(); m_scene->purgeGLResources(); { LockHolder locker(m_terminateRunLoopConditionLock); m_compositingRunLoop = nullptr; m_context = nullptr; m_scene = nullptr; m_terminateRunLoopCondition.notifyOne(); } detachThread(m_threadIdentifier); }
ThreadedCompositor::ThreadedCompositor(Client* client, WebPage& webPage, uint64_t nativeSurfaceHandle) : m_client(client) , m_nativeSurfaceHandle(nativeSurfaceHandle) #if USE(REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR) , m_displayRefreshMonitor(adoptRef(new WebKit::DisplayRefreshMonitor(*this))) #endif , m_compositingRunLoop(std::make_unique<CompositingRunLoop>([this] { renderLayerTree(); })) { m_clientRendersNextFrame.store(false); m_coordinateUpdateCompletionWithClient.store(false); m_compositingManager.establishConnection(webPage); m_compositingRunLoop->performTaskSync([this, protectedThis = makeRef(*this)] { m_scene = adoptRef(new CoordinatedGraphicsScene(this)); m_viewportController = std::make_unique<SimpleViewportController>(this); #if PLATFORM(GTK) m_scene->setActive(!!m_nativeSurfaceHandle); #endif }); }
void ThreadedCompositor::forceRepaint() { m_compositingRunLoop->performTaskSync([this, protectedThis = makeRef(*this)] { renderLayerTree(); }); }