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

Unified Diff: cc/test/test_compositor_frame_sink.cc

Issue 2445553002: cc: Make OutputSurface entirely live on one thread in tests. (Closed)
Patch Set: osonthread: fixcontextdeleteintest Created 4 years, 2 months 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
« no previous file with comments | « cc/test/test_compositor_frame_sink.h ('k') | cc/test/test_hooks.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « cc/test/test_compositor_frame_sink.h ('k') | cc/test/test_hooks.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698