| Index: content/browser/renderer_host/offscreen_canvas_compositor_frame_sink.cc
|
| diff --git a/content/browser/renderer_host/offscreen_canvas_compositor_frame_sink.cc b/content/browser/renderer_host/offscreen_canvas_compositor_frame_sink.cc
|
| index e90ba3f4f5ea625d8246188d057a31959e6bbb8e..fa0d239bc05d35536838c8de711742e4014c82a3 100644
|
| --- a/content/browser/renderer_host/offscreen_canvas_compositor_frame_sink.cc
|
| +++ b/content/browser/renderer_host/offscreen_canvas_compositor_frame_sink.cc
|
| @@ -6,118 +6,91 @@
|
|
|
| #include "cc/surfaces/surface.h"
|
| #include "cc/surfaces/surface_manager.h"
|
| -#include "content/browser/compositor/surface_utils.h"
|
| #include "mojo/public/cpp/bindings/strong_binding.h"
|
|
|
| namespace content {
|
|
|
| -OffscreenCanvasCompositorFrameSink::OffscreenCanvasCompositorFrameSink(
|
| - const cc::SurfaceId& surface_id,
|
| - cc::mojom::MojoCompositorFrameSinkClientPtr client)
|
| - : surface_id_(surface_id), client_(std::move(client)) {
|
| - cc::SurfaceManager* manager = GetSurfaceManager();
|
| - surface_factory_ = base::MakeUnique<cc::SurfaceFactory>(
|
| - surface_id_.frame_sink_id(), manager, this);
|
| - manager->RegisterFrameSinkId(surface_id_.frame_sink_id());
|
| -}
|
| -
|
| -OffscreenCanvasCompositorFrameSink::~OffscreenCanvasCompositorFrameSink() {
|
| - cc::SurfaceManager* manager = GetSurfaceManager();
|
| - if (!manager) {
|
| - // Inform SurfaceFactory that SurfaceManager's no longer alive to
|
| - // avoid its destruction error.
|
| - surface_factory_->DidDestroySurfaceManager();
|
| - } else {
|
| - manager->InvalidateFrameSinkId(surface_id_.frame_sink_id());
|
| - }
|
| - surface_factory_->EvictSurface();
|
| -}
|
| -
|
| // static
|
| void OffscreenCanvasCompositorFrameSink::Create(
|
| - const cc::SurfaceId& surface_id,
|
| + const cc::FrameSinkId& frame_sink_id,
|
| + cc::SurfaceManager* surface_manager,
|
| cc::mojom::MojoCompositorFrameSinkClientPtr client,
|
| cc::mojom::MojoCompositorFrameSinkRequest request) {
|
| - mojo::MakeStrongBinding(base::MakeUnique<OffscreenCanvasCompositorFrameSink>(
|
| - surface_id, std::move(client)),
|
| - std::move(request));
|
| + std::unique_ptr<OffscreenCanvasCompositorFrameSink> impl =
|
| + base::MakeUnique<OffscreenCanvasCompositorFrameSink>(
|
| + frame_sink_id, surface_manager, std::move(client));
|
| + OffscreenCanvasCompositorFrameSink* compositor_frame_sink = impl.get();
|
| + compositor_frame_sink->binding_ =
|
| + mojo::MakeStrongBinding(std::move(impl), std::move(request));
|
| }
|
|
|
| -void OffscreenCanvasCompositorFrameSink::SubmitCompositorFrame(
|
| - const cc::LocalFrameId& local_frame_id,
|
| - cc::CompositorFrame frame) {
|
| - ++ack_pending_count_;
|
| - surface_factory_->SubmitCompositorFrame(
|
| - surface_id_.local_frame_id(), std::move(frame),
|
| - base::Bind(
|
| - &OffscreenCanvasCompositorFrameSink::DidReceiveCompositorFrameAck,
|
| - base::Unretained(this)));
|
| -}
|
| +OffscreenCanvasCompositorFrameSink::OffscreenCanvasCompositorFrameSink(
|
| + const cc::FrameSinkId& frame_sink_id,
|
| + cc::SurfaceManager* surface_manager,
|
| + cc::mojom::MojoCompositorFrameSinkClientPtr client)
|
| + : support_(this, surface_manager, frame_sink_id, nullptr, nullptr),
|
| + client_(std::move(client)) {}
|
| +
|
| +OffscreenCanvasCompositorFrameSink::~OffscreenCanvasCompositorFrameSink() {}
|
|
|
| void OffscreenCanvasCompositorFrameSink::SetNeedsBeginFrame(
|
| bool needs_begin_frame) {
|
| - NOTIMPLEMENTED();
|
| + support_.SetNeedsBeginFrame(needs_begin_frame);
|
| +}
|
| +
|
| +void OffscreenCanvasCompositorFrameSink::SubmitCompositorFrame(
|
| + const cc::LocalFrameId& local_frame_id,
|
| + cc::CompositorFrame frame) {
|
| + support_.SubmitCompositorFrame(local_frame_id, std::move(frame));
|
| }
|
|
|
| void OffscreenCanvasCompositorFrameSink::AddSurfaceReferences(
|
| const std::vector<cc::SurfaceReference>& references) {
|
| + // TODO(fsamuel, staraz): Implement this.
|
| NOTIMPLEMENTED();
|
| }
|
|
|
| void OffscreenCanvasCompositorFrameSink::RemoveSurfaceReferences(
|
| const std::vector<cc::SurfaceReference>& references) {
|
| + // TODO(fsamuel, staraz): Implement this.
|
| NOTIMPLEMENTED();
|
| }
|
|
|
| void OffscreenCanvasCompositorFrameSink::EvictFrame() {
|
| - // TODO(fsamuel, staraz): Implement this
|
| - NOTIMPLEMENTED();
|
| + support_.EvictFrame();
|
| }
|
|
|
| void OffscreenCanvasCompositorFrameSink::Require(
|
| const cc::LocalFrameId& local_frame_id,
|
| const cc::SurfaceSequence& sequence) {
|
| - // TODO(staraz): Implement this.
|
| - NOTIMPLEMENTED();
|
| + support_.Require(local_frame_id, sequence);
|
| }
|
|
|
| void OffscreenCanvasCompositorFrameSink::Satisfy(
|
| const cc::SurfaceSequence& sequence) {
|
| - // TODO(staraz): Implement this.
|
| - NOTIMPLEMENTED();
|
| + support_.Satisfy(sequence);
|
| }
|
|
|
| -void OffscreenCanvasCompositorFrameSink::ReturnResources(
|
| - const cc::ReturnedResourceArray& resources) {
|
| - if (resources.empty())
|
| - return;
|
| -
|
| - if (!ack_pending_count_ && client_) {
|
| - client_->ReclaimResources(resources);
|
| - return;
|
| - }
|
| -
|
| - std::copy(resources.begin(), resources.end(),
|
| - std::back_inserter(surface_returned_resources_));
|
| +void OffscreenCanvasCompositorFrameSink::DidReceiveCompositorFrameAck() {
|
| + if (client_)
|
| + client_->DidReceiveCompositorFrameAck();
|
| }
|
|
|
| -void OffscreenCanvasCompositorFrameSink::WillDrawSurface(
|
| - const cc::LocalFrameId& id,
|
| - const gfx::Rect& damage_rect) {}
|
| +void OffscreenCanvasCompositorFrameSink::OnBeginFrame(
|
| + const cc::BeginFrameArgs& args) {
|
| + if (client_)
|
| + client_->OnBeginFrame(args);
|
| +}
|
|
|
| -void OffscreenCanvasCompositorFrameSink::SetBeginFrameSource(
|
| - cc::BeginFrameSource* begin_frame_source) {}
|
| +void OffscreenCanvasCompositorFrameSink::ReclaimResources(
|
| + const cc::ReturnedResourceArray& resources) {
|
| + if (client_)
|
| + client_->ReclaimResources(resources);
|
| +}
|
|
|
| -void OffscreenCanvasCompositorFrameSink::DidReceiveCompositorFrameAck() {
|
| - if (!client_)
|
| - return;
|
| - client_->DidReceiveCompositorFrameAck();
|
| - DCHECK_GT(ack_pending_count_, 0);
|
| - if (!surface_returned_resources_.empty()) {
|
| - client_->ReclaimResources(surface_returned_resources_);
|
| - surface_returned_resources_.clear();
|
| - }
|
| - ack_pending_count_--;
|
| +void OffscreenCanvasCompositorFrameSink::WillDrawSurface() {
|
| + if (client_)
|
| + client_->WillDrawSurface();
|
| }
|
|
|
| } // namespace content
|
|
|