Chromium Code Reviews| 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..4584ca44ddf42889669e00f22ad2605556667a8b 100644 |
| --- a/third_party/WebKit/Source/platform/graphics/CanvasSurfaceLayerBridge.cpp |
| +++ b/third_party/WebKit/Source/platform/graphics/CanvasSurfaceLayerBridge.cpp |
| @@ -5,6 +5,7 @@ |
| #include "platform/graphics/CanvasSurfaceLayerBridge.h" |
| #include "cc/layers/surface_layer.h" |
| +#include "cc/surfaces/surface_embedding.h" |
| #include "cc/surfaces/surface_id.h" |
| #include "cc/surfaces/surface_sequence.h" |
| #include "platform/graphics/GraphicsLayer.h" |
| @@ -17,6 +18,29 @@ |
| namespace blink { |
| +namespace { |
| + |
| +class SurfaceEmbedding : public cc::SurfaceEmbeddingUsingSequence { |
| + public: |
| + SurfaceEmbedding(const mojom::blink::OffscreenCanvasSurfacePtr& m_service) |
| + : m_service(m_service) {} |
| + void RequireSequence(const cc::SurfaceId& id, |
| + const cc::SurfaceSequence& seq) const override { |
| + m_service->Require(id, seq); |
| + } |
| + void SatisfySequence(const cc::SurfaceSequence& seq) const override { |
| + m_service->Satisfy(seq); |
| + } |
| + |
| + protected: |
| + ~SurfaceEmbedding() override = default; |
| + |
| + private: |
| + const mojom::blink::OffscreenCanvasSurfacePtr& m_service; |
|
Fady Samuel
2016/12/12 16:25:07
This is likely going to have lifetime issues.
|
| +}; |
| + |
| +} // namespace |
| + |
| CanvasSurfaceLayerBridge::CanvasSurfaceLayerBridge( |
| mojom::blink::OffscreenCanvasSurfacePtr service) |
| : m_service(std::move(service)) {} |
| @@ -28,16 +52,10 @@ 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)); |
| + cc::SurfaceEmbeddingPtr ref(new SurfaceEmbedding(m_service)); |
| + m_surfaceLayer = cc::SurfaceLayer::Create(std::move(ref)); |
| + 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 +63,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 |