Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(447)

Unified Diff: third_party/WebKit/Source/platform/graphics/CanvasSurfaceLayerBridge.cpp

Issue 2036663003: Establish mojo service between Canvas (blink) and SurfaceManager (browser) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Throw away typemaps in Blink Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 b13d9ad7c36c2260ff386af7f2fdae63c4b4564e..ec00cb99338919da6c8dc5d3eaac7c7dd3558258 100644
--- a/third_party/WebKit/Source/platform/graphics/CanvasSurfaceLayerBridge.cpp
+++ b/third_party/WebKit/Source/platform/graphics/CanvasSurfaceLayerBridge.cpp
@@ -4,24 +4,70 @@
#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/ServiceRegistry.h"
#include "public/platform/WebCompositorSupport.h"
#include "public/platform/WebLayer.h"
+#include "ui/gfx/geometry/size.h"
+#include "wtf/Functional.h"
namespace blink {
CanvasSurfaceLayerBridge::CanvasSurfaceLayerBridge()
{
- m_solidColorLayer = cc::SolidColorLayer::Create();
- m_solidColorLayer->SetBackgroundColor(SK_ColorBLUE);
- m_webLayer = adoptPtr(Platform::current()->compositorSupport()->createLayerFromCCLayer(m_solidColorLayer.get()));
- GraphicsLayer::registerContentsLayer(m_webLayer.get());
+ DCHECK(!m_service.is_bound());
+ Platform::current()->serviceRegistry()->connectToRemoteService(mojo::GetProxy(&m_service));
danakj 2016/06/13 21:30:40 It occured to me another way to deal with testing
}
CanvasSurfaceLayerBridge::~CanvasSurfaceLayerBridge()
{
}
+bool CanvasSurfaceLayerBridge::createSurfaceLayer(int canvasWidth, int canvasHeight)
+{
+ // Get SurfaceId from browser.
+ bool success = this->syncGetServiceId();
+ if (!success)
+ return false;
+
+ // Immediately send an Async message to browser to request Surface creation.
+ this->asyncRequestSurfaceCreation();
+
+ // Create SurfaceLayer.
+ const cc::SurfaceLayer::SatisfyCallback& satisfyCallback = createBaseCallback(bind<cc::SurfaceSequence>(&CanvasSurfaceLayerBridge::satisfyCallback, this));
danakj 2016/06/13 20:53:39 don't use a const& here for the lvalue, you're sto
xlai (Olivia) 2016/06/14 21:10:17 Done.
+ const cc::SurfaceLayer::RequireCallback& requireCallback = createBaseCallback(bind<cc::SurfaceId, cc::SurfaceSequence>(&CanvasSurfaceLayerBridge::requireCallback, this));
+ m_surfaceLayer = cc::SurfaceLayer::Create(satisfyCallback, requireCallback);
danakj 2016/06/13 20:53:39 you can std::move the callbacks here, to drop the
xlai (Olivia) 2016/06/14 21:10:17 Done.
+ m_surfaceLayer->SetSurfaceId(m_surfaceId, 1.f, gfx::Size(canvasWidth, canvasHeight));
danakj 2016/06/13 20:53:39 How are you going to handle resizing (do you need
+
+ // Convert SurfaceLayer to WebLayer and register it.
danakj 2016/06/13 20:53:39 style: This type of comment that just says what th
xlai (Olivia) 2016/06/14 21:10:17 Done. Removed superficial comments.
+ m_webLayer = adoptPtr(Platform::current()->compositorSupport()->createLayerFromCCLayer(m_surfaceLayer.get()));
danakj 2016/06/13 20:53:38 Maybe you don't need to go through Platform etc an
xlai (Olivia) 2016/06/14 21:10:17 I tried this and find that it can only be done by
+ GraphicsLayer::registerContentsLayer(m_webLayer.get());
+ return true;
+}
+
+void CanvasSurfaceLayerBridge::satisfyCallback(cc::SurfaceSequence sequence)
+{
+ m_service->Satisfy(sequence);
}
+
+void CanvasSurfaceLayerBridge::requireCallback(cc::SurfaceId surfaceId, cc::SurfaceSequence sequence)
+{
+ m_service->Require(surfaceId, sequence);
+}
+
+bool CanvasSurfaceLayerBridge::syncGetServiceId()
danakj 2016/06/13 20:53:39 do you mean GetSurfaceId?
xlai (Olivia) 2016/06/14 21:10:17 The function name style in Blink starts with small
danakj 2016/06/14 22:07:00 Oh oops, I was referring to Service vs Surface.
+{
+ return m_service->GetSurfaceId(&m_surfaceId);
+}
+
+void CanvasSurfaceLayerBridge::asyncRequestSurfaceCreation()
+{
+ m_service->RequestSurfaceCreation(m_surfaceId);
+}
+
+} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698