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

Unified Diff: content/browser/renderer_host/offscreen_canvas_surface_impl.cc

Issue 2584643002: Revamp OffscreenCanvas commit flow (Closed)
Patch Set: rebase and fix conflict Created 4 years 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: content/browser/renderer_host/offscreen_canvas_surface_impl.cc
diff --git a/content/browser/renderer_host/offscreen_canvas_surface_impl.cc b/content/browser/renderer_host/offscreen_canvas_surface_impl.cc
index 29679540fa365f8c20961cffd571b7762c55ddf2..c03b8d94037ac95026b6b7f91d97e1aed4154d5d 100644
--- a/content/browser/renderer_host/offscreen_canvas_surface_impl.cc
+++ b/content/browser/renderer_host/offscreen_canvas_surface_impl.cc
@@ -12,12 +12,16 @@
#include "content/browser/compositor/surface_utils.h"
#include "content/browser/renderer_host/offscreen_canvas_surface_manager.h"
#include "content/public/browser/browser_thread.h"
-#include "mojo/public/cpp/bindings/strong_binding.h"
namespace content {
-OffscreenCanvasSurfaceImpl::OffscreenCanvasSurfaceImpl()
- : id_allocator_(new cc::SurfaceIdAllocator()) {}
+OffscreenCanvasSurfaceImpl::OffscreenCanvasSurfaceImpl(
+ const cc::FrameSinkId& frame_sink_id,
+ blink::mojom::OffscreenCanvasSurfaceClientPtr client)
+ : client_(std::move(client)), frame_sink_id_(frame_sink_id) {
+ OffscreenCanvasSurfaceManager::GetInstance()
+ ->RegisterOffscreenCanvasSurfaceInstance(frame_sink_id_, this);
+}
OffscreenCanvasSurfaceImpl::~OffscreenCanvasSurfaceImpl() {
if (frame_sink_id_.is_valid()) {
@@ -28,34 +32,30 @@ OffscreenCanvasSurfaceImpl::~OffscreenCanvasSurfaceImpl() {
// static
void OffscreenCanvasSurfaceImpl::Create(
- mojo::InterfaceRequest<blink::mojom::OffscreenCanvasSurface> request) {
- mojo::MakeStrongBinding(base::MakeUnique<OffscreenCanvasSurfaceImpl>(),
- std::move(request));
+ const cc::FrameSinkId& frame_sink_id,
+ blink::mojom::OffscreenCanvasSurfaceClientPtr client,
+ blink::mojom::OffscreenCanvasSurfaceRequest request) {
+ std::unique_ptr<OffscreenCanvasSurfaceImpl> impl =
+ base::MakeUnique<OffscreenCanvasSurfaceImpl>(frame_sink_id,
+ std::move(client));
+ OffscreenCanvasSurfaceImpl* surface_service = impl.get();
+ surface_service->binding_ =
+ mojo::MakeStrongBinding(std::move(impl), std::move(request));
}
-void OffscreenCanvasSurfaceImpl::GetSurfaceId(GetSurfaceIdCallback callback) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- if (frame_sink_id_.is_valid()) {
- // This IPC should be only called once for each HTMLCanvasElement. In this
- // case, frame_sink_id_ is still unset.
- // As the browser makes no assumption of correct behavior of renderer, in
- // an unwanted situation when this function is invoked twice, we need to
- // unregister the instance from manager.
- OffscreenCanvasSurfaceManager::GetInstance()
- ->UnregisterOffscreenCanvasSurfaceInstance(frame_sink_id_);
- mojo::ReportBadMessage(
- "The same OffscreenCanvasSurfaceImpl is registered to "
- "OffscreenCanvasSurfaceManager twice.");
+void OffscreenCanvasSurfaceImpl::OnSurfaceCreated(
+ const cc::SurfaceId& surface_id,
+ const gfx::Size& frame_size,
+ float device_scale_factor) {
+ DCHECK_EQ(surface_id.frame_sink_id(), frame_sink_id_);
+ if (!current_local_frame_id_.is_valid() ||
+ surface_id.local_frame_id() != current_local_frame_id_) {
+ current_local_frame_id_ = surface_id.local_frame_id();
+ if (client_) {
+ client_->OnSurfaceCreated(surface_id, frame_size.width(),
+ frame_size.height(), device_scale_factor);
+ }
}
-
- frame_sink_id_ = AllocateFrameSinkId();
- cc::SurfaceId surface_id =
- cc::SurfaceId(frame_sink_id_, id_allocator_->GenerateId());
-
- OffscreenCanvasSurfaceManager::GetInstance()
- ->RegisterOffscreenCanvasSurfaceInstance(frame_sink_id_, this);
-
- std::move(callback).Run(surface_id);
}
void OffscreenCanvasSurfaceImpl::Require(const cc::SurfaceId& surface_id,

Powered by Google App Engine
This is Rietveld 408576698