RemoteImageBufferMessageHandler.h [plain text]
#pragma once
#if ENABLE(GPU_PROCESS)
#include "ImageBufferBackendHandle.h"
#include "ImageBufferFlushIdentifier.h"
#include "ImageBufferIdentifier.h"
#include <WebCore/ColorSpace.h>
#include <WebCore/DisplayList.h>
#include <WebCore/FloatSize.h>
#include <WebCore/RenderingMode.h>
namespace WebCore {
class ImageData;
enum class AlphaPremultiplication : uint8_t;
}
namespace WebKit {
class RemoteRenderingBackend;
class RemoteImageBufferMessageHandler {
public:
virtual ~RemoteImageBufferMessageHandler();
ImageBufferIdentifier imageBufferIdentifier() const { return m_imageBufferIdentifier; }
virtual void createBackend(const WebCore::FloatSize& logicalSize, const WebCore::IntSize& backendSize, float resolutionScale, WebCore::ColorSpace, ImageBufferBackendHandle) = 0;
void commitFlushContext(ImageBufferFlushIdentifier);
protected:
RemoteImageBufferMessageHandler(const WebCore::FloatSize&, WebCore::RenderingMode, float resolutionScale, WebCore::ColorSpace, RemoteRenderingBackend&);
virtual bool isBackendCreated() const = 0;
bool isPendingFlush() const { return m_sentFlushIdentifier != m_receivedFlushIdentifier; }
RefPtr<WebCore::ImageData> getImageData(WebCore::AlphaPremultiplication outputFormat, const WebCore::IntRect& srcRect) const;
void waitForCreateImageBufferBackend();
void waitForCommitImageBufferFlushContext();
void flushDrawingContext(WebCore::DisplayList::DisplayList&);
void flushDrawingContextAndWaitCommit(WebCore::DisplayList::DisplayList&);
private:
WeakPtr<RemoteRenderingBackend> m_remoteRenderingBackend;
ImageBufferIdentifier m_imageBufferIdentifier { ImageBufferIdentifier::generate() };
ImageBufferFlushIdentifier m_sentFlushIdentifier;
ImageBufferFlushIdentifier m_receivedFlushIdentifier;
};
}
#endif // ENABLE(GPU_PROCESS)