blob: fa0d239bc05d35536838c8de711742e4014c82a3 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/browser/renderer_host/offscreen_canvas_compositor_frame_sink.h"
#include "cc/surfaces/surface.h"
#include "cc/surfaces/surface_manager.h"
#include "mojo/public/cpp/bindings/strong_binding.h"
namespace content {
// static
void OffscreenCanvasCompositorFrameSink::Create(
const cc::FrameSinkId& frame_sink_id,
cc::SurfaceManager* surface_manager,
cc::mojom::MojoCompositorFrameSinkClientPtr client,
cc::mojom::MojoCompositorFrameSinkRequest 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));
}
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) {
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() {
support_.EvictFrame();
}
void OffscreenCanvasCompositorFrameSink::Require(
const cc::LocalFrameId& local_frame_id,
const cc::SurfaceSequence& sequence) {
support_.Require(local_frame_id, sequence);
}
void OffscreenCanvasCompositorFrameSink::Satisfy(
const cc::SurfaceSequence& sequence) {
support_.Satisfy(sequence);
}
void OffscreenCanvasCompositorFrameSink::DidReceiveCompositorFrameAck() {
if (client_)
client_->DidReceiveCompositorFrameAck();
}
void OffscreenCanvasCompositorFrameSink::OnBeginFrame(
const cc::BeginFrameArgs& args) {
if (client_)
client_->OnBeginFrame(args);
}
void OffscreenCanvasCompositorFrameSink::ReclaimResources(
const cc::ReturnedResourceArray& resources) {
if (client_)
client_->ReclaimResources(resources);
}
void OffscreenCanvasCompositorFrameSink::WillDrawSurface() {
if (client_)
client_->WillDrawSurface();
}
} // namespace content