Index: cc/test/test_compositor_frame_sink.cc |
diff --git a/cc/test/test_compositor_frame_sink.cc b/cc/test/test_compositor_frame_sink.cc |
index 5d79d61031855a4aa5b02e50d8223a69bf564a73..1d33bf97d21be488236ddd6bf073fb3ff6473c5c 100644 |
--- a/cc/test/test_compositor_frame_sink.cc |
+++ b/cc/test/test_compositor_frame_sink.cc |
@@ -21,7 +21,6 @@ static constexpr FrameSinkId kCompositorFrameSinkId(1, 1); |
TestCompositorFrameSink::TestCompositorFrameSink( |
scoped_refptr<ContextProvider> compositor_context_provider, |
scoped_refptr<ContextProvider> worker_context_provider, |
- std::unique_ptr<OutputSurface> display_output_surface, |
SharedBitmapManager* shared_bitmap_manager, |
gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, |
const RendererSettings& renderer_settings, |
@@ -30,38 +29,17 @@ TestCompositorFrameSink::TestCompositorFrameSink( |
bool force_disable_reclaim_resources) |
: CompositorFrameSink(std::move(compositor_context_provider), |
std::move(worker_context_provider)), |
+ synchronous_composite_(synchronous_composite), |
+ renderer_settings_(renderer_settings), |
+ shared_bitmap_manager_(shared_bitmap_manager), |
+ gpu_memory_buffer_manager_(gpu_memory_buffer_manager), |
task_runner_(std::move(task_runner)), |
frame_sink_id_(kCompositorFrameSinkId), |
surface_manager_(new SurfaceManager), |
surface_id_allocator_(new SurfaceIdAllocator()), |
surface_factory_( |
new SurfaceFactory(frame_sink_id_, surface_manager_.get(), this)), |
- display_context_shared_with_compositor_( |
- display_output_surface->context_provider() == context_provider()), |
weak_ptr_factory_(this) { |
- std::unique_ptr<SyntheticBeginFrameSource> begin_frame_source; |
- std::unique_ptr<DisplayScheduler> scheduler; |
- if (!synchronous_composite) { |
- if (renderer_settings.disable_display_vsync) { |
- begin_frame_source.reset(new BackToBackBeginFrameSource( |
- base::MakeUnique<DelayBasedTimeSource>(task_runner_.get()))); |
- } else { |
- begin_frame_source.reset(new DelayBasedBeginFrameSource( |
- base::MakeUnique<DelayBasedTimeSource>(task_runner_.get()))); |
- begin_frame_source->SetAuthoritativeVSyncInterval( |
- base::TimeDelta::FromMilliseconds(1000.f / |
- renderer_settings.refresh_rate)); |
- } |
- scheduler.reset(new DisplayScheduler( |
- begin_frame_source.get(), task_runner_.get(), |
- display_output_surface->capabilities().max_frames_pending)); |
- } |
- display_.reset( |
- new Display(shared_bitmap_manager, gpu_memory_buffer_manager, |
- renderer_settings, std::move(begin_frame_source), |
- std::move(display_output_surface), std::move(scheduler), |
- base::MakeUnique<TextureMailboxDeleter>(task_runner_.get()))); |
- |
// Since this CompositorFrameSink and the Display are tightly coupled and in |
// the same process/thread, the LayerTreeHostImpl can reclaim resources from |
// the Display. But we allow tests to disable this to mimic an out-of-process |
@@ -85,10 +63,39 @@ bool TestCompositorFrameSink::BindToClient(CompositorFrameSinkClient* client) { |
if (!CompositorFrameSink::BindToClient(client)) |
return false; |
+ std::unique_ptr<OutputSurface> display_output_surface = |
+ test_client_->CreateDisplayOutputSurface(context_provider()); |
+ bool display_context_shared_with_compositor = |
+ display_output_surface->context_provider() == context_provider(); |
+ |
+ std::unique_ptr<SyntheticBeginFrameSource> begin_frame_source; |
+ std::unique_ptr<DisplayScheduler> scheduler; |
+ if (!synchronous_composite_) { |
+ if (renderer_settings_.disable_display_vsync) { |
+ begin_frame_source.reset(new BackToBackBeginFrameSource( |
+ base::MakeUnique<DelayBasedTimeSource>(task_runner_.get()))); |
+ } else { |
+ begin_frame_source.reset(new DelayBasedBeginFrameSource( |
+ base::MakeUnique<DelayBasedTimeSource>(task_runner_.get()))); |
+ begin_frame_source->SetAuthoritativeVSyncInterval( |
+ base::TimeDelta::FromMilliseconds(1000.f / |
+ renderer_settings_.refresh_rate)); |
+ } |
+ scheduler.reset(new DisplayScheduler( |
+ begin_frame_source.get(), task_runner_.get(), |
+ display_output_surface->capabilities().max_frames_pending)); |
+ } |
+ |
+ display_.reset( |
+ new Display(shared_bitmap_manager_, gpu_memory_buffer_manager_, |
+ renderer_settings_, std::move(begin_frame_source), |
+ std::move(display_output_surface), std::move(scheduler), |
+ base::MakeUnique<TextureMailboxDeleter>(task_runner_.get()))); |
+ |
// We want the Display's OutputSurface to hear about lost context, and when |
// this shares a context with it we should not be listening for lost context |
// callbacks on the context here. |
- if (display_context_shared_with_compositor_ && context_provider()) |
+ if (display_context_shared_with_compositor && context_provider()) |
context_provider()->SetLostContextCallback(base::Closure()); |
surface_manager_->RegisterFrameSinkId(frame_sink_id_); |
@@ -108,18 +115,18 @@ void TestCompositorFrameSink::DetachFromClient() { |
surface_factory_->Destroy(delegated_local_frame_id_); |
surface_manager_->UnregisterSurfaceFactoryClient(frame_sink_id_); |
surface_manager_->InvalidateFrameSinkId(frame_sink_id_); |
+ display_ = nullptr; |
bound_ = false; |
} |
- display_ = nullptr; |
surface_factory_ = nullptr; |
surface_id_allocator_ = nullptr; |
surface_manager_ = nullptr; |
+ test_client_ = nullptr; |
CompositorFrameSink::DetachFromClient(); |
} |
void TestCompositorFrameSink::SubmitCompositorFrame(CompositorFrame frame) { |
- if (test_client_) |
- test_client_->DisplayReceivedCompositorFrame(frame); |
+ test_client_->DisplayReceivedCompositorFrame(frame); |
if (delegated_local_frame_id_.is_null()) { |
delegated_local_frame_id_ = surface_id_allocator_->GenerateId(); |
@@ -195,13 +202,11 @@ void TestCompositorFrameSink::DisplayOutputSurfaceLost() { |
void TestCompositorFrameSink::DisplayWillDrawAndSwap( |
bool will_draw_and_swap, |
const RenderPassList& render_passes) { |
- if (test_client_) |
- test_client_->DisplayWillDrawAndSwap(will_draw_and_swap, render_passes); |
+ test_client_->DisplayWillDrawAndSwap(will_draw_and_swap, render_passes); |
} |
void TestCompositorFrameSink::DisplayDidDrawAndSwap() { |
- if (test_client_) |
- test_client_->DisplayDidDrawAndSwap(); |
+ test_client_->DisplayDidDrawAndSwap(); |
} |
} // namespace cc |