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 03926147fbe145186792c2cc665dd285f81227be..222cbb6c999dacfdb3b7278153644a7e9782de3f 100644 |
--- a/third_party/WebKit/Source/platform/graphics/CanvasSurfaceLayerBridge.cpp |
+++ b/third_party/WebKit/Source/platform/graphics/CanvasSurfaceLayerBridge.cpp |
@@ -4,25 +4,53 @@ |
#include "platform/graphics/CanvasSurfaceLayerBridge.h" |
-#include "cc/layers/solid_color_layer.h" |
+#include "cc/layers/surface_layer.h" |
+#include "cc/surfaces/surface_id.h" |
+#include "cc/surfaces/surface_sequence.h" |
#include "platform/graphics/GraphicsLayer.h" |
+#include "platform/mojo/MojoHelper.h" |
#include "public/platform/Platform.h" |
#include "public/platform/WebCompositorSupport.h" |
#include "public/platform/WebLayer.h" |
+#include "ui/gfx/geometry/size.h" |
+#include "wtf/Functional.h" |
#include "wtf/PtrUtil.h" |
namespace blink { |
-CanvasSurfaceLayerBridge::CanvasSurfaceLayerBridge() |
+CanvasSurfaceLayerBridge::CanvasSurfaceLayerBridge(std::unique_ptr<CanvasSurfaceLayerBridgeClient> client) |
{ |
- m_solidColorLayer = cc::SolidColorLayer::Create(); |
- m_solidColorLayer->SetBackgroundColor(SK_ColorBLUE); |
- m_webLayer = wrapUnique(Platform::current()->compositorSupport()->createLayerFromCCLayer(m_solidColorLayer.get())); |
- GraphicsLayer::registerContentsLayer(m_webLayer.get()); |
+ m_client = std::move(client); |
} |
CanvasSurfaceLayerBridge::~CanvasSurfaceLayerBridge() |
{ |
} |
+bool CanvasSurfaceLayerBridge::createSurfaceLayer(int canvasWidth, int canvasHeight) |
+{ |
+ if (!m_client->syncGetSurfaceId(&m_surfaceId)) |
+ return false; |
+ |
+ m_client->asyncRequestSurfaceCreation(m_surfaceId); |
+ cc::SurfaceLayer::SatisfyCallback satisfyCallback = createBaseCallback(bind<cc::SurfaceSequence>(&CanvasSurfaceLayerBridge::satisfyCallback, this)); |
+ cc::SurfaceLayer::RequireCallback requireCallback = createBaseCallback(bind<cc::SurfaceId, cc::SurfaceSequence>(&CanvasSurfaceLayerBridge::requireCallback, this)); |
+ m_surfaceLayer = cc::SurfaceLayer::Create(std::move(satisfyCallback), std::move(requireCallback)); |
+ m_surfaceLayer->SetSurfaceId(m_surfaceId, 1.f, gfx::Size(canvasWidth, canvasHeight)); |
+ |
+ m_webLayer = wrapUnique(Platform::current()->compositorSupport()->createLayerFromCCLayer(m_surfaceLayer.get())); |
+ GraphicsLayer::registerContentsLayer(m_webLayer.get()); |
+ return true; |
+} |
+ |
+void CanvasSurfaceLayerBridge::satisfyCallback(cc::SurfaceSequence sequence) |
+{ |
+ m_client->asyncSatisfy(sequence); |
+} |
+ |
+void CanvasSurfaceLayerBridge::requireCallback(cc::SurfaceId surfaceId, cc::SurfaceSequence sequence) |
+{ |
+ m_client->asyncRequire(surfaceId, sequence); |
} |
+ |
+} // namespace blink |