OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/compositor/test/in_process_context_factory.h" | 5 #include "ui/compositor/test/in_process_context_factory.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 cc::OutputSurfaceClient* client_ = nullptr; | 112 cc::OutputSurfaceClient* client_ = nullptr; |
113 base::WeakPtrFactory<DirectOutputSurface> weak_ptr_factory_; | 113 base::WeakPtrFactory<DirectOutputSurface> weak_ptr_factory_; |
114 | 114 |
115 DISALLOW_COPY_AND_ASSIGN(DirectOutputSurface); | 115 DISALLOW_COPY_AND_ASSIGN(DirectOutputSurface); |
116 }; | 116 }; |
117 | 117 |
118 } // namespace | 118 } // namespace |
119 | 119 |
120 struct InProcessContextFactory::PerCompositorData { | 120 struct InProcessContextFactory::PerCompositorData { |
121 gpu::SurfaceHandle surface_handle = gpu::kNullSurfaceHandle; | 121 gpu::SurfaceHandle surface_handle = gpu::kNullSurfaceHandle; |
| 122 std::unique_ptr<cc::BeginFrameSource> begin_frame_source; |
122 std::unique_ptr<cc::Display> display; | 123 std::unique_ptr<cc::Display> display; |
123 }; | 124 }; |
124 | 125 |
125 InProcessContextFactory::InProcessContextFactory( | 126 InProcessContextFactory::InProcessContextFactory( |
126 bool context_factory_for_test, | 127 bool context_factory_for_test, |
127 cc::SurfaceManager* surface_manager) | 128 cc::SurfaceManager* surface_manager) |
128 : next_surface_client_id_(1u), | 129 : next_surface_client_id_(1u), |
129 use_test_surface_(true), | 130 use_test_surface_(true), |
130 context_factory_for_test_(context_factory_for_test), | 131 context_factory_for_test_(context_factory_for_test), |
131 surface_manager_(surface_manager) { | 132 surface_manager_(surface_manager) { |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
193 } else { | 194 } else { |
194 display_output_surface = | 195 display_output_surface = |
195 base::MakeUnique<DirectOutputSurface>(context_provider); | 196 base::MakeUnique<DirectOutputSurface>(context_provider); |
196 } | 197 } |
197 | 198 |
198 std::unique_ptr<cc::DelayBasedBeginFrameSource> begin_frame_source( | 199 std::unique_ptr<cc::DelayBasedBeginFrameSource> begin_frame_source( |
199 new cc::DelayBasedBeginFrameSource( | 200 new cc::DelayBasedBeginFrameSource( |
200 base::MakeUnique<cc::DelayBasedTimeSource>( | 201 base::MakeUnique<cc::DelayBasedTimeSource>( |
201 compositor->task_runner().get()))); | 202 compositor->task_runner().get()))); |
202 std::unique_ptr<cc::DisplayScheduler> scheduler(new cc::DisplayScheduler( | 203 std::unique_ptr<cc::DisplayScheduler> scheduler(new cc::DisplayScheduler( |
203 begin_frame_source.get(), compositor->task_runner().get(), | 204 compositor->task_runner().get(), |
204 display_output_surface->capabilities().max_frames_pending)); | 205 display_output_surface->capabilities().max_frames_pending)); |
205 | 206 |
206 data->display = base::MakeUnique<cc::Display>( | 207 data->display = base::MakeUnique<cc::Display>( |
207 &shared_bitmap_manager_, &gpu_memory_buffer_manager_, | 208 &shared_bitmap_manager_, &gpu_memory_buffer_manager_, |
208 compositor->GetRendererSettings(), compositor->frame_sink_id(), | 209 compositor->GetRendererSettings(), compositor->frame_sink_id(), |
209 std::move(begin_frame_source), std::move(display_output_surface), | 210 begin_frame_source.get(), std::move(display_output_surface), |
210 std::move(scheduler), base::MakeUnique<cc::TextureMailboxDeleter>( | 211 std::move(scheduler), base::MakeUnique<cc::TextureMailboxDeleter>( |
211 compositor->task_runner().get())); | 212 compositor->task_runner().get())); |
| 213 // Note that we are careful not to destroy a prior |data->begin_frame_source| |
| 214 // until we have reset |data->display|. |
| 215 data->begin_frame_source = std::move(begin_frame_source); |
212 | 216 |
213 auto* display = per_compositor_data_[compositor.get()]->display.get(); | 217 auto* display = per_compositor_data_[compositor.get()]->display.get(); |
214 auto compositor_frame_sink = base::MakeUnique<cc::DirectCompositorFrameSink>( | 218 auto compositor_frame_sink = base::MakeUnique<cc::DirectCompositorFrameSink>( |
215 compositor->frame_sink_id(), surface_manager_, display, context_provider, | 219 compositor->frame_sink_id(), surface_manager_, display, context_provider, |
216 shared_worker_context_provider_, &gpu_memory_buffer_manager_, | 220 shared_worker_context_provider_, &gpu_memory_buffer_manager_, |
217 &shared_bitmap_manager_); | 221 &shared_bitmap_manager_); |
218 compositor->SetCompositorFrameSink(std::move(compositor_frame_sink)); | 222 compositor->SetCompositorFrameSink(std::move(compositor_frame_sink)); |
219 } | 223 } |
220 | 224 |
221 std::unique_ptr<Reflector> InProcessContextFactory::CreateReflector( | 225 std::unique_ptr<Reflector> InProcessContextFactory::CreateReflector( |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
322 data->surface_handle = tracker->AddSurfaceForNativeWidget(widget); | 326 data->surface_handle = tracker->AddSurfaceForNativeWidget(widget); |
323 #endif | 327 #endif |
324 } | 328 } |
325 | 329 |
326 PerCompositorData* return_ptr = data.get(); | 330 PerCompositorData* return_ptr = data.get(); |
327 per_compositor_data_[compositor] = std::move(data); | 331 per_compositor_data_[compositor] = std::move(data); |
328 return return_ptr; | 332 return return_ptr; |
329 } | 333 } |
330 | 334 |
331 } // namespace ui | 335 } // namespace ui |
OLD | NEW |