RemoteRenderingBackendProxy.h [plain text]
#pragma once
#if ENABLE(GPU_PROCESS)
#include "Connection.h"
#include "ImageBufferFlushIdentifier.h"
#include "ImageBufferIdentifier.h"
#include "ImageDataReference.h"
#include "MessageReceiver.h"
#include "MessageSender.h"
#include "RemoteImageBufferMessageHandlerProxy.h"
#include "RenderingBackendIdentifier.h"
#include <WebCore/ColorSpace.h>
#include <WebCore/DisplayListItems.h>
#include <WebCore/FloatSize.h>
#include <WebCore/RenderingMode.h>
#include <wtf/HashMap.h>
#include <wtf/WeakPtr.h>
namespace WebCore {
namespace DisplayList {
class DisplayList;
}
}
namespace WebKit {
class GPUConnectionToWebProcess;
class RemoteRenderingBackendProxy
: public IPC::MessageSender
, private IPC::MessageReceiver {
public:
static std::unique_ptr<RemoteRenderingBackendProxy> create(GPUConnectionToWebProcess&, RenderingBackendIdentifier);
virtual ~RemoteRenderingBackendProxy();
RenderingBackendIdentifier renderingBackendIdentifier() const { return m_renderingBackendIdentifier; }
private:
RemoteRenderingBackendProxy(GPUConnectionToWebProcess&, RenderingBackendIdentifier);
IPC::Connection* messageSenderConnection() const override;
uint64_t messageSenderDestinationID() const override;
void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override;
void didReceiveSyncMessage(IPC::Connection&, IPC::Decoder&, std::unique_ptr<IPC::Encoder>&) override;
void createImageBuffer(const WebCore::FloatSize& logicalSize, WebCore::RenderingMode, float resolutionScale, WebCore::ColorSpace, ImageBufferIdentifier);
void releaseImageBuffer(ImageBufferIdentifier);
void flushImageBufferDrawingContext(const WebCore::DisplayList::DisplayList&, ImageBufferIdentifier);
void flushImageBufferDrawingContextAndCommit(const WebCore::DisplayList::DisplayList&, ImageBufferFlushIdentifier, ImageBufferIdentifier);
void getImageData(WebCore::AlphaPremultiplication outputFormat, WebCore::IntRect srcRect, ImageBufferIdentifier, CompletionHandler<void(IPC::ImageDataReference&&)>&&);
using ImageBufferMessageHandlerMap = HashMap<ImageBufferIdentifier, std::unique_ptr<RemoteImageBufferMessageHandlerProxy>>;
ImageBufferMessageHandlerMap m_imageBufferMessageHandlerMap;
WeakPtr<GPUConnectionToWebProcess> m_gpuConnectionToWebProcess;
RenderingBackendIdentifier m_renderingBackendIdentifier;
};
}
#endif // ENABLE(GPU_PROCESS)