Bug 1379920 - Introduce WebRenderCanvasData. r=kats
MozReview-Commit-ID: 4aBfWib1bQq
--- a/gfx/layers/wr/WebRenderUserData.cpp
+++ b/gfx/layers/wr/WebRenderUserData.cpp
@@ -5,16 +5,17 @@
#include "WebRenderUserData.h"
#include "mozilla/layers/ImageClient.h"
#include "mozilla/layers/WebRenderBridgeChild.h"
#include "mozilla/layers/WebRenderLayerManager.h"
#include "mozilla/layers/WebRenderMessages.h"
#include "nsDisplayListInvalidation.h"
+#include "WebRenderCanvasRenderer.h"
namespace mozilla {
namespace layers {
WebRenderBridgeChild*
WebRenderUserData::WrBridge() const
{
return mWRManager->WrBridge();
@@ -169,10 +170,29 @@ WebRenderFallbackData::GetGeometry()
}
void
WebRenderFallbackData::SetGeometry(nsAutoPtr<nsDisplayItemGeometry> aGeometry)
{
mGeometry = aGeometry;
}
+WebRenderCanvasData::WebRenderCanvasData(WebRenderLayerManager* aWRManager)
+ : WebRenderUserData(aWRManager)
+{
+}
+
+WebRenderCanvasData::~WebRenderCanvasData()
+{
+}
+
+WebRenderCanvasRendererAsync*
+WebRenderCanvasData::GetCanvasRenderer()
+{
+ if (!mCanvasRenderer) {
+ mCanvasRenderer = MakeUnique<WebRenderCanvasRendererAsync>(mWRManager);
+ }
+
+ return mCanvasRenderer.get();
+}
+
} // namespace layers
} // namespace mozilla
--- a/gfx/layers/wr/WebRenderUserData.h
+++ b/gfx/layers/wr/WebRenderUserData.h
@@ -9,36 +9,41 @@
#include "mozilla/layers/StackingContextHelper.h"
#include "mozilla/webrender/WebRenderAPI.h"
#include "nsAutoPtr.h"
class nsDisplayItemGeometry;
namespace mozilla {
namespace layers {
+class CanvasLayer;
class ImageClient;
class ImageContainer;
class WebRenderBridgeChild;
+class WebRenderCanvasData;
+class WebRenderCanvasRendererAsync;
class WebRenderImageData;
class WebRenderLayerManager;
class WebRenderUserData
{
public:
NS_INLINE_DECL_REFCOUNTING(WebRenderUserData)
explicit WebRenderUserData(WebRenderLayerManager* aWRManager)
: mWRManager(aWRManager)
{ }
virtual WebRenderImageData* AsImageData() { return nullptr; }
+ virtual WebRenderCanvasData* AsCanvasData() { return nullptr; }
enum class UserDataType {
eImage,
eFallback,
+ eCanvas,
};
virtual UserDataType GetType() = 0;
protected:
virtual ~WebRenderUserData() {}
WebRenderBridgeChild* WrBridge() const;
@@ -96,12 +101,28 @@ public:
nsRect GetBounds() { return mBounds; }
void SetBounds(const nsRect& aRect) { mBounds = aRect; }
protected:
nsAutoPtr<nsDisplayItemGeometry> mGeometry;
nsRect mBounds;
};
+class WebRenderCanvasData : public WebRenderUserData
+{
+public:
+ explicit WebRenderCanvasData(WebRenderLayerManager* aWRManager);
+ virtual ~WebRenderCanvasData();
+
+ virtual WebRenderCanvasData* AsCanvasData() override { return this; }
+ virtual UserDataType GetType() override { return UserDataType::eCanvas; }
+ static UserDataType Type() { return UserDataType::eCanvas; }
+
+ WebRenderCanvasRendererAsync* GetCanvasRenderer();
+
+protected:
+ UniquePtr<WebRenderCanvasRendererAsync> mCanvasRenderer;
+};
+
} // namespace layers
} // namespace mozilla
#endif /* GFX_WEBRENDERUSERDATA_H */