Bug 1379920 - Introduce WebRenderCanvasData. r=kats draft
authorMorris Tseng <mtseng@mozilla.com>
Tue, 11 Jul 2017 17:01:16 +0800
changeset 612087 0fd99692c8b454df0898620318bb889410f67872
parent 612086 ac2020aa6f595f38965dc25a13e0a9e99b677d58
child 612088 fbbdcb838c634605dcf728a4eee07928ef78478d
push id69379
push userbmo:mtseng@mozilla.com
push dateThu, 20 Jul 2017 09:19:49 +0000
reviewerskats
bugs1379920
milestone56.0a1
Bug 1379920 - Introduce WebRenderCanvasData. r=kats MozReview-Commit-ID: 4aBfWib1bQq
gfx/layers/wr/WebRenderUserData.cpp
gfx/layers/wr/WebRenderUserData.h
--- 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 */