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 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 } | 92 } |
93 | 93 |
94 private: | 94 private: |
95 base::WeakPtrFactory<DirectOutputSurface> weak_ptr_factory_; | 95 base::WeakPtrFactory<DirectOutputSurface> weak_ptr_factory_; |
96 | 96 |
97 DISALLOW_COPY_AND_ASSIGN(DirectOutputSurface); | 97 DISALLOW_COPY_AND_ASSIGN(DirectOutputSurface); |
98 }; | 98 }; |
99 | 99 |
100 } // namespace | 100 } // namespace |
101 | 101 |
102 struct InProcessContextFactory::PerCompositorData { | |
103 std::unique_ptr<cc::SyntheticBeginFrameSource> begin_frame_source; | |
104 std::unique_ptr<cc::Display> display; | |
105 }; | |
106 | |
107 InProcessContextFactory::InProcessContextFactory( | 102 InProcessContextFactory::InProcessContextFactory( |
108 bool context_factory_for_test, | 103 bool context_factory_for_test, |
109 cc::SurfaceManager* surface_manager) | 104 cc::SurfaceManager* surface_manager) |
110 : next_surface_client_id_(1u), | 105 : next_surface_client_id_(1u), |
111 use_test_surface_(true), | 106 use_test_surface_(true), |
112 context_factory_for_test_(context_factory_for_test), | 107 context_factory_for_test_(context_factory_for_test), |
113 surface_manager_(surface_manager) { | 108 surface_manager_(surface_manager) { |
114 DCHECK_NE(gl::GetGLImplementation(), gl::kGLImplementationNone) | 109 DCHECK_NE(gl::GetGLImplementation(), gl::kGLImplementationNone) |
115 << "If running tests, ensure that main() is calling " | 110 << "If running tests, ensure that main() is calling " |
116 << "gl::GLSurfaceTestSupport::InitializeOneOff()"; | 111 << "gl::GLSurfaceTestSupport::InitializeOneOff()"; |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 bool flipped_output_surface = false; | 161 bool flipped_output_surface = false; |
167 display_output_surface = base::MakeUnique<cc::PixelTestOutputSurface>( | 162 display_output_surface = base::MakeUnique<cc::PixelTestOutputSurface>( |
168 context_provider, shared_worker_context_provider_, | 163 context_provider, shared_worker_context_provider_, |
169 flipped_output_surface); | 164 flipped_output_surface); |
170 } else { | 165 } else { |
171 display_output_surface = base::MakeUnique<DirectOutputSurface>( | 166 display_output_surface = base::MakeUnique<DirectOutputSurface>( |
172 context_provider, shared_worker_context_provider_); | 167 context_provider, shared_worker_context_provider_); |
173 } | 168 } |
174 | 169 |
175 if (surface_manager_) { | 170 if (surface_manager_) { |
176 auto data = base::MakeUnique<PerCompositorData>(); | 171 std::unique_ptr<cc::DelayBasedBeginFrameSource> begin_frame_source( |
177 data->begin_frame_source.reset(new cc::DelayBasedBeginFrameSource( | 172 new cc::DelayBasedBeginFrameSource( |
178 base::MakeUnique<cc::DelayBasedTimeSource>( | 173 base::MakeUnique<cc::DelayBasedTimeSource>( |
179 compositor->task_runner().get()))); | 174 compositor->task_runner().get()))); |
180 std::unique_ptr<cc::DisplayScheduler> scheduler(new cc::DisplayScheduler( | 175 std::unique_ptr<cc::DisplayScheduler> scheduler(new cc::DisplayScheduler( |
181 data->begin_frame_source.get(), compositor->task_runner().get(), | 176 begin_frame_source.get(), compositor->task_runner().get(), |
182 display_output_surface->capabilities().max_frames_pending)); | 177 display_output_surface->capabilities().max_frames_pending)); |
183 data->display = base::MakeUnique<cc::Display>( | 178 per_compositor_data_[compositor.get()] = base::MakeUnique<cc::Display>( |
184 GetSharedBitmapManager(), GetGpuMemoryBufferManager(), | 179 GetSharedBitmapManager(), GetGpuMemoryBufferManager(), |
185 compositor->GetRendererSettings(), data->begin_frame_source.get(), | 180 compositor->GetRendererSettings(), std::move(begin_frame_source), |
186 std::move(display_output_surface), std::move(scheduler), | 181 std::move(display_output_surface), std::move(scheduler), |
187 base::MakeUnique<cc::TextureMailboxDeleter>( | 182 base::MakeUnique<cc::TextureMailboxDeleter>( |
188 compositor->task_runner().get())); | 183 compositor->task_runner().get())); |
| 184 |
| 185 auto* display = per_compositor_data_[compositor.get()].get(); |
189 std::unique_ptr<cc::SurfaceDisplayOutputSurface> surface_output_surface( | 186 std::unique_ptr<cc::SurfaceDisplayOutputSurface> surface_output_surface( |
190 new cc::SurfaceDisplayOutputSurface( | 187 new cc::SurfaceDisplayOutputSurface( |
191 surface_manager_, compositor->surface_id_allocator(), | 188 surface_manager_, compositor->surface_id_allocator(), display, |
192 data->display.get(), context_provider, | 189 context_provider, shared_worker_context_provider_)); |
193 shared_worker_context_provider_)); | |
194 | |
195 per_compositor_data_[compositor.get()] = std::move(data); | |
196 compositor->SetOutputSurface(std::move(surface_output_surface)); | 190 compositor->SetOutputSurface(std::move(surface_output_surface)); |
197 } else { | 191 } else { |
198 compositor->SetOutputSurface(std::move(display_output_surface)); | 192 compositor->SetOutputSurface(std::move(display_output_surface)); |
199 } | 193 } |
200 } | 194 } |
201 | 195 |
202 std::unique_ptr<Reflector> InProcessContextFactory::CreateReflector( | 196 std::unique_ptr<Reflector> InProcessContextFactory::CreateReflector( |
203 Compositor* mirrored_compositor, | 197 Compositor* mirrored_compositor, |
204 Layer* mirroring_layer) { | 198 Layer* mirroring_layer) { |
205 return base::WrapUnique(new FakeReflector); | 199 return base::WrapUnique(new FakeReflector); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
258 } | 252 } |
259 | 253 |
260 cc::SurfaceManager* InProcessContextFactory::GetSurfaceManager() { | 254 cc::SurfaceManager* InProcessContextFactory::GetSurfaceManager() { |
261 return surface_manager_; | 255 return surface_manager_; |
262 } | 256 } |
263 | 257 |
264 void InProcessContextFactory::SetDisplayVisible(ui::Compositor* compositor, | 258 void InProcessContextFactory::SetDisplayVisible(ui::Compositor* compositor, |
265 bool visible) { | 259 bool visible) { |
266 if (!per_compositor_data_.count(compositor)) | 260 if (!per_compositor_data_.count(compositor)) |
267 return; | 261 return; |
268 per_compositor_data_[compositor]->display->SetVisible(visible); | 262 per_compositor_data_[compositor]->SetVisible(visible); |
269 } | 263 } |
270 | 264 |
271 void InProcessContextFactory::ResizeDisplay(ui::Compositor* compositor, | 265 void InProcessContextFactory::ResizeDisplay(ui::Compositor* compositor, |
272 const gfx::Size& size) { | 266 const gfx::Size& size) { |
273 if (!per_compositor_data_.count(compositor)) | 267 if (!per_compositor_data_.count(compositor)) |
274 return; | 268 return; |
275 per_compositor_data_[compositor]->display->Resize(size); | 269 per_compositor_data_[compositor]->Resize(size); |
276 } | 270 } |
277 | 271 |
278 void InProcessContextFactory::AddObserver(ContextFactoryObserver* observer) { | 272 void InProcessContextFactory::AddObserver(ContextFactoryObserver* observer) { |
279 observer_list_.AddObserver(observer); | 273 observer_list_.AddObserver(observer); |
280 } | 274 } |
281 | 275 |
282 void InProcessContextFactory::RemoveObserver(ContextFactoryObserver* observer) { | 276 void InProcessContextFactory::RemoveObserver(ContextFactoryObserver* observer) { |
283 observer_list_.RemoveObserver(observer); | 277 observer_list_.RemoveObserver(observer); |
284 } | 278 } |
285 | 279 |
286 } // namespace ui | 280 } // namespace ui |
OLD | NEW |