Index: third_party/WebKit/Source/platform/graphics/CanvasSurfaceLayerBridge.cpp |
diff --git a/third_party/WebKit/Source/platform/graphics/CanvasSurfaceLayerBridge.cpp b/third_party/WebKit/Source/platform/graphics/CanvasSurfaceLayerBridge.cpp |
index 4355caed2a27dd712a886705e5bd9e97539d3cf5..b5e4cadbdf94d574d43129c5f7ee64ab4ff4de27 100644 |
--- a/third_party/WebKit/Source/platform/graphics/CanvasSurfaceLayerBridge.cpp |
+++ b/third_party/WebKit/Source/platform/graphics/CanvasSurfaceLayerBridge.cpp |
@@ -5,7 +5,9 @@ |
#include "platform/graphics/CanvasSurfaceLayerBridge.h" |
#include "cc/layers/surface_layer.h" |
+#include "cc/surfaces/sequence_surface_reference_factory.h" |
#include "cc/surfaces/surface_id.h" |
+#include "cc/surfaces/surface_info.h" |
#include "cc/surfaces/surface_sequence.h" |
#include "platform/graphics/GraphicsLayer.h" |
#include "platform/mojo/MojoHelper.h" |
@@ -17,9 +19,39 @@ |
namespace blink { |
+namespace { |
+ |
+class OffscreenCanvasSurfaceReferenceFactory |
+ : public cc::SequenceSurfaceReferenceFactory { |
+ public: |
+ OffscreenCanvasSurfaceReferenceFactory( |
+ const mojom::blink::OffscreenCanvasSurfacePtr& m_service) |
+ : m_service(m_service) {} |
+ |
+ private: |
+ ~OffscreenCanvasSurfaceReferenceFactory() override = default; |
+ |
+ // cc::SequenceSurfaceReferenceFactory implementation: |
+ void RequireSequence(const cc::SurfaceId& id, |
+ const cc::SurfaceSequence& sequence) const override { |
+ m_service->Require(id, sequence); |
+ } |
+ |
+ void SatisfySequence(const cc::SurfaceSequence& sequence) const override { |
+ m_service->Satisfy(sequence); |
+ } |
+ |
+ const mojom::blink::OffscreenCanvasSurfacePtr& m_service; |
Fady Samuel
2016/12/14 20:11:39
Hold a weakptr to CanvasSurfaceLayerBridge instead
|
+ |
+ DISALLOW_COPY_AND_ASSIGN(OffscreenCanvasSurfaceReferenceFactory); |
+}; |
+ |
+} // namespace |
+ |
CanvasSurfaceLayerBridge::CanvasSurfaceLayerBridge( |
mojom::blink::OffscreenCanvasSurfacePtr service) |
- : m_service(std::move(service)) {} |
+ : m_service(std::move(service)), |
+ m_refFactory(new OffscreenCanvasSurfaceReferenceFactory(m_service)) {} |
CanvasSurfaceLayerBridge::~CanvasSurfaceLayerBridge() {} |
@@ -28,16 +60,9 @@ bool CanvasSurfaceLayerBridge::createSurfaceLayer(int canvasWidth, |
if (!m_service->GetSurfaceId(&m_surfaceId)) |
return false; |
- cc::SurfaceLayer::SatisfyCallback satisfyCallback = |
- convertToBaseCallback(WTF::bind( |
- &CanvasSurfaceLayerBridge::satisfyCallback, WTF::unretained(this))); |
- cc::SurfaceLayer::RequireCallback requireCallback = |
- convertToBaseCallback(WTF::bind( |
- &CanvasSurfaceLayerBridge::requireCallback, WTF::unretained(this))); |
- m_surfaceLayer = cc::SurfaceLayer::Create(std::move(satisfyCallback), |
- std::move(requireCallback)); |
- m_surfaceLayer->SetSurfaceId(m_surfaceId, 1.f, |
- gfx::Size(canvasWidth, canvasHeight)); |
+ m_surfaceLayer = cc::SurfaceLayer::Create(m_refFactory); |
+ cc::SurfaceInfo info(m_surfaceId, 1.f, gfx::Size(canvasWidth, canvasHeight)); |
+ m_surfaceLayer->SetSurfaceInfo(info); |
m_webLayer = Platform::current()->compositorSupport()->createLayerFromCCLayer( |
m_surfaceLayer.get()); |
@@ -45,15 +70,4 @@ bool CanvasSurfaceLayerBridge::createSurfaceLayer(int canvasWidth, |
return true; |
} |
-void CanvasSurfaceLayerBridge::satisfyCallback( |
- const cc::SurfaceSequence& sequence) { |
- m_service->Satisfy(sequence); |
-} |
- |
-void CanvasSurfaceLayerBridge::requireCallback( |
- const cc::SurfaceId& surfaceId, |
- const cc::SurfaceSequence& sequence) { |
- m_service->Require(surfaceId, sequence); |
-} |
- |
} // namespace blink |