GraphicsContextGLOpenGLManager.cpp [plain text]
#include "config.h"
#if ENABLE(WEBGL)
#include "GraphicsContextGLOpenGLManager.h"
#include "GraphicsContextGLOpenGL.h"
#include "Logging.h"
namespace WebCore {
GraphicsContextGLOpenGLManager& GraphicsContextGLOpenGLManager::sharedManager()
{
static NeverDestroyed<GraphicsContextGLOpenGLManager> s_manager;
return s_manager;
}
#if PLATFORM(MAC)
void GraphicsContextGLOpenGLManager::displayWasReconfigured(CGDirectDisplayID, CGDisplayChangeSummaryFlags flags, void*)
{
LOG(WebGL, "GraphicsContextGLOpenGLManager::displayWasReconfigured");
if (flags & kCGDisplaySetModeFlag)
GraphicsContextGLOpenGLManager::sharedManager().displayWasReconfigured();
}
#endif
#if PLATFORM(COCOA)
void GraphicsContextGLOpenGLManager::displayWasReconfigured()
{
for (const auto& context : m_contexts)
context->displayWasReconfigured();
}
#endif
void GraphicsContextGLOpenGLManager::addContext(GraphicsContextGLOpenGL* context)
{
ASSERT(context);
if (!context)
return;
#if PLATFORM(MAC) && !ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
if (!m_contexts.size())
CGDisplayRegisterReconfigurationCallback(displayWasReconfigured, nullptr);
#endif
ASSERT(!m_contexts.contains(context));
m_contexts.append(context);
}
void GraphicsContextGLOpenGLManager::removeContext(GraphicsContextGLOpenGL* context)
{
if (!m_contexts.contains(context))
return;
m_contexts.removeFirst(context);
#if PLATFORM(MAC) && !ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
if (!m_contexts.size())
CGDisplayRemoveReconfigurationCallback(displayWasReconfigured, nullptr);
#endif
}
void GraphicsContextGLOpenGLManager::recycleContextIfNecessary()
{
if (hasTooManyContexts()) {
LOG(WebGL, "GraphicsContextGLOpenGLManager recycled context (%p).", m_contexts[0]);
m_contexts[0]->recycleContext();
}
}
}
#endif // ENABLE(WEBGL)