AcceleratedSurfaceWPE.cpp [plain text]
#include "config.h"
#include "AcceleratedSurfaceWPE.h"
#include "WebPage.h"
#include <WebCore/PlatformDisplayWPE.h>
#include <wpe/renderer-backend-egl.h>
using namespace WebCore;
namespace WebKit {
std::unique_ptr<AcceleratedSurfaceWPE> AcceleratedSurfaceWPE::create(WebPage& webPage, Client& client)
{
return std::unique_ptr<AcceleratedSurfaceWPE>(new AcceleratedSurfaceWPE(webPage, client));
}
AcceleratedSurfaceWPE::AcceleratedSurfaceWPE(WebPage& webPage, Client& client)
: AcceleratedSurface(webPage, client)
{
m_compositingManager.establishConnection(webPage);
}
AcceleratedSurfaceWPE::~AcceleratedSurfaceWPE()
{
ASSERT(!m_backend);
}
void AcceleratedSurfaceWPE::initialize()
{
m_backend = wpe_renderer_backend_egl_target_create(m_compositingManager.releaseConnectionFd());
static struct wpe_renderer_backend_egl_target_client s_client = {
[](void* data)
{
auto& surface = *reinterpret_cast<AcceleratedSurfaceWPE*>(data);
surface.m_client.frameComplete();
},
};
wpe_renderer_backend_egl_target_set_client(m_backend, &s_client, this);
wpe_renderer_backend_egl_target_initialize(m_backend, downcast<PlatformDisplayWPE>(PlatformDisplay::sharedDisplay()).backend(),
std::max(0, m_size.width()), std::max(0, m_size.height()));
}
void AcceleratedSurfaceWPE::finalize()
{
wpe_renderer_backend_egl_target_destroy(m_backend);
m_backend = nullptr;
}
uint64_t AcceleratedSurfaceWPE::window() const
{
ASSERT(m_backend);
return reinterpret_cast<uint64_t>(wpe_renderer_backend_egl_target_get_native_window(m_backend));
}
uint64_t AcceleratedSurfaceWPE::surfaceID() const
{
return m_webPage.pageID();
}
bool AcceleratedSurfaceWPE::resize(const IntSize& size)
{
ASSERT(m_backend);
if (!AcceleratedSurface::resize(size))
return false;
wpe_renderer_backend_egl_target_resize(m_backend, std::max(0, m_size.width()), std::max(0, m_size.height()));
return true;
}
void AcceleratedSurfaceWPE::willRenderFrame()
{
ASSERT(m_backend);
wpe_renderer_backend_egl_target_frame_will_render(m_backend);
}
void AcceleratedSurfaceWPE::didRenderFrame()
{
ASSERT(m_backend);
wpe_renderer_backend_egl_target_frame_rendered(m_backend);
}
}