Commit 7fe38563 authored by staraz's avatar staraz Committed by Commit bot

Added MojoCompositorFrameSink::EvictFrame() and MojoCompositorFrameSinkClient::WillDrawSurface()

This is a first step to separate exo::SurfaceFactoryOwner into
exo::CompositorFrameSink and exo::CompositorFrameSinkHolder
(WIP CL: https://codereview.chromium.org/2493223002)

BUG=659601
CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_trusty_blink_rel

Review-Url: https://codereview.chromium.org/2544103002
Cr-Commit-Position: refs/heads/master@{#436117}
parent 07cab687
......@@ -31,6 +31,10 @@ interface MojoCompositorFrameSink {
SubmitCompositorFrame(cc.mojom.LocalFrameId local_frame_id,
cc.mojom.CompositorFrame frame);
// Notify that the surface is no longer in use (and is okay to be evicted) so
// that its resources gets returned in time.
EvictFrame();
// TODO(fsamuel): ReadbackBitmap API would be useful here.
};
......@@ -49,6 +53,9 @@ interface MojoCompositorFrameSinkClient {
// Returns resources sent to SubmitCompositorFrame to be reused or freed.
ReclaimResources(ReturnedResourceArray resources);
// Called when surface is being scheduled for a draw.
WillDrawSurface();
};
// MojoCompositorFrameSinkPrivate is used by the display compositor host to set
......
......@@ -59,6 +59,11 @@ void OffscreenCanvasCompositorFrameSink::SetNeedsBeginFrame(
NOTIMPLEMENTED();
}
void OffscreenCanvasCompositorFrameSink::EvictFrame() {
// TODO(fsamuel, staraz): Implement this
NOTIMPLEMENTED();
}
void OffscreenCanvasCompositorFrameSink::ReturnResources(
const cc::ReturnedResourceArray& resources) {
if (resources.empty())
......
......@@ -28,6 +28,7 @@ class OffscreenCanvasCompositorFrameSink
void SubmitCompositorFrame(const cc::LocalFrameId& local_frame_id,
cc::CompositorFrame frame) override;
void SetNeedsBeginFrame(bool needs_begin_frame) override;
void EvictFrame() override;
// cc::SurfaceFactoryClient implementation.
void ReturnResources(const cc::ReturnedResourceArray& resources) override;
......
......@@ -113,6 +113,11 @@ void WindowCompositorFrameSink::ReclaimResources(
client_->ReclaimResources(resources);
}
void WindowCompositorFrameSink::WillDrawSurface() {
// TODO(fsamuel, staraz): Implement this.
NOTIMPLEMENTED();
}
void WindowCompositorFrameSink::OnNeedsBeginFrames(bool needs_begin_frames) {
compositor_frame_sink_->SetNeedsBeginFrame(needs_begin_frames);
}
......
......@@ -54,6 +54,7 @@ class WindowCompositorFrameSink
void DidReceiveCompositorFrameAck() override;
void OnBeginFrame(const cc::BeginFrameArgs& begin_frame_args) override;
void ReclaimResources(const cc::ReturnedResourceArray& resources) override;
void WillDrawSurface() override;
// cc::ExternalBeginFrameSourceClient implementation.
void OnNeedsBeginFrames(bool needs_begin_frames) override;
......
......@@ -88,6 +88,10 @@ void GpuCompositorFrameSink::SubmitCompositorFrame(
}
}
void GpuCompositorFrameSink::EvictFrame() {
surface_factory_.EvictSurface();
}
void GpuCompositorFrameSink::DidReceiveCompositorFrameAck() {
if (!client_)
return;
......
......@@ -51,6 +51,7 @@ class GpuCompositorFrameSink : public cc::mojom::MojoCompositorFrameSink,
void SetNeedsBeginFrame(bool needs_begin_frame) override;
void SubmitCompositorFrame(const cc::LocalFrameId& local_frame_id,
cc::CompositorFrame frame) override;
void EvictFrame() override;
// cc::mojom::MojoCompositorFrameSinkPrivate:
void AddChildFrameSink(const cc::FrameSinkId& child_frame_sink_id) override;
......
......@@ -125,6 +125,11 @@ void FrameGenerator::ReclaimResources(
// any resources.
}
void FrameGenerator::WillDrawSurface() {
// TODO(fsamuel, staraz): Implement this.
NOTIMPLEMENTED();
}
cc::CompositorFrame FrameGenerator::GenerateCompositorFrame(
const gfx::Rect& output_rect) {
const cc::RenderPassId render_pass_id(1, 1);
......
......@@ -77,6 +77,7 @@ class FrameGenerator : public ServerWindowTracker,
void DidReceiveCompositorFrameAck() override;
void OnBeginFrame(const cc::BeginFrameArgs& begin_frame_arags) override;
void ReclaimResources(const cc::ReturnedResourceArray& resources) override;
void WillDrawSurface() override;
// Generates the CompositorFrame.
cc::CompositorFrame GenerateCompositorFrame(const gfx::Rect& output_rect);
......
......@@ -378,6 +378,11 @@ void OffscreenCanvasFrameDispatcherImpl::ReclaimResources(
}
}
void OffscreenCanvasFrameDispatcherImpl::WillDrawSurface() {
// TODO(fsamuel, staraz): Implement this.
NOTIMPLEMENTED();
}
void OffscreenCanvasFrameDispatcherImpl::reclaimResource(unsigned resourceId) {
// An image resource needs to be returned by both the
// CompositorFrameSink and the HTMLCanvasElement. These
......
......@@ -42,6 +42,7 @@ class PLATFORM_EXPORT OffscreenCanvasFrameDispatcherImpl final
void DidReceiveCompositorFrameAck() override;
void OnBeginFrame(const cc::BeginFrameArgs&) override;
void ReclaimResources(const cc::ReturnedResourceArray& resources) override;
void WillDrawSurface() override;
// This enum is used in histogram, so it should be append-only.
enum OffscreenCanvasCommitType {
......
......@@ -111,6 +111,11 @@ void WindowCompositorFrameSink::ReclaimResources(
client_->ReclaimResources(resources);
}
void WindowCompositorFrameSink::WillDrawSurface() {
// TODO(fsamuel, staraz): Implement this.
NOTIMPLEMENTED();
}
void WindowCompositorFrameSink::OnNeedsBeginFrames(bool needs_begin_frames) {
compositor_frame_sink_->SetNeedsBeginFrame(needs_begin_frames);
}
......
......@@ -47,6 +47,7 @@ class WindowCompositorFrameSink
void DidReceiveCompositorFrameAck() override;
void OnBeginFrame(const cc::BeginFrameArgs& begin_frame_args) override;
void ReclaimResources(const cc::ReturnedResourceArray& resources) override;
void WillDrawSurface() override;
// cc::ExternalBeginFrameSourceClient implementation.
void OnNeedsBeginFrames(bool needs_begin_frames) override;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment