OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 "content/browser/aura/gpu_process_transport_factory.h" | 5 #include "content/browser/aura/gpu_process_transport_factory.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
11 #include "base/location.h" | 11 #include "base/location.h" |
12 #include "base/message_loop/message_loop.h" | 12 #include "base/message_loop/message_loop.h" |
13 #include "cc/output/compositor_frame.h" | 13 #include "cc/output/compositor_frame.h" |
14 #include "cc/output/output_surface.h" | 14 #include "cc/output/output_surface.h" |
15 #include "content/browser/aura/browser_compositor_output_surface.h" | 15 #include "content/browser/aura/browser_compositor_output_surface.h" |
| 16 #include "content/browser/aura/browser_compositor_output_surface_capturer.h" |
16 #include "content/browser/aura/browser_compositor_output_surface_proxy.h" | 17 #include "content/browser/aura/browser_compositor_output_surface_proxy.h" |
17 #include "content/browser/aura/reflector_impl.h" | 18 #include "content/browser/aura/reflector_impl.h" |
18 #include "content/browser/aura/software_browser_compositor_output_surface.h" | 19 #include "content/browser/aura/software_browser_compositor_output_surface.h" |
19 #include "content/browser/gpu/browser_gpu_channel_host_factory.h" | 20 #include "content/browser/gpu/browser_gpu_channel_host_factory.h" |
20 #include "content/browser/gpu/gpu_data_manager_impl.h" | 21 #include "content/browser/gpu/gpu_data_manager_impl.h" |
21 #include "content/browser/gpu/gpu_surface_tracker.h" | 22 #include "content/browser/gpu/gpu_surface_tracker.h" |
22 #include "content/browser/renderer_host/render_widget_host_impl.h" | 23 #include "content/browser/renderer_host/render_widget_host_impl.h" |
23 #include "content/common/gpu/client/context_provider_command_buffer.h" | 24 #include "content/common/gpu/client/context_provider_command_buffer.h" |
24 #include "content/common/gpu/client/gl_helper.h" | 25 #include "content/common/gpu/client/gl_helper.h" |
25 #include "content/common/gpu/client/gpu_channel_host.h" | 26 #include "content/common/gpu/client/gpu_channel_host.h" |
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
244 ui::Compositor::GetCompositorMessageLoop(); | 245 ui::Compositor::GetCompositorMessageLoop(); |
245 if (!compositor_thread_task_runner.get()) | 246 if (!compositor_thread_task_runner.get()) |
246 compositor_thread_task_runner = base::MessageLoopProxy::current(); | 247 compositor_thread_task_runner = base::MessageLoopProxy::current(); |
247 | 248 |
248 // Here we know the GpuProcessHost has been set up, because we created a | 249 // Here we know the GpuProcessHost has been set up, because we created a |
249 // context. | 250 // context. |
250 output_surface_proxy_->ConnectToGpuProcessHost( | 251 output_surface_proxy_->ConnectToGpuProcessHost( |
251 compositor_thread_task_runner.get()); | 252 compositor_thread_task_runner.get()); |
252 | 253 |
253 scoped_ptr<BrowserCompositorOutputSurface> surface( | 254 scoped_ptr<BrowserCompositorOutputSurface> surface( |
254 new BrowserCompositorOutputSurface( | 255 new BrowserCompositorOutputSurface(context_provider, |
255 context_provider, | 256 data->surface_id, |
256 per_compositor_data_[compositor]->surface_id, | 257 &output_surface_map_, |
257 &output_surface_map_, | 258 base::MessageLoopProxy::current(), |
258 base::MessageLoopProxy::current().get(), | 259 compositor->AsWeakPtr())); |
259 compositor->AsWeakPtr())); | |
260 if (data->reflector.get()) { | 260 if (data->reflector.get()) { |
261 data->reflector->CreateSharedTexture(); | 261 data->reflector->CreateSharedTexture(); |
262 data->reflector->AttachToOutputSurface(surface.get()); | 262 data->reflector->AttachToOutputSurface(surface.get()); |
263 } | 263 } |
264 | 264 |
265 return surface.PassAs<cc::OutputSurface>(); | 265 return surface.PassAs<cc::OutputSurface>(); |
266 } | 266 } |
267 | 267 |
268 scoped_refptr<ui::Reflector> GpuProcessTransportFactory::CreateReflector( | 268 scoped_refptr<ui::Reflector> GpuProcessTransportFactory::CreateReflector( |
269 ui::Compositor* source, | 269 ui::Compositor* source, |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
346 if (!shared_contexts_main_thread_.get()) | 346 if (!shared_contexts_main_thread_.get()) |
347 return NULL; | 347 return NULL; |
348 scoped_refptr<OwnedTexture> image(new OwnedTexture( | 348 scoped_refptr<OwnedTexture> image(new OwnedTexture( |
349 shared_contexts_main_thread_->Context3d(), | 349 shared_contexts_main_thread_->Context3d(), |
350 size, | 350 size, |
351 device_scale_factor, | 351 device_scale_factor, |
352 texture_id)); | 352 texture_id)); |
353 return image; | 353 return image; |
354 } | 354 } |
355 | 355 |
| 356 scoped_ptr<SurfaceCapturer> |
| 357 GpuProcessTransportFactory::CreateOutputSurfaceCapturer( |
| 358 ui::Compositor* compositor, |
| 359 SurfaceCapturer::Client* client) { |
| 360 PerCompositorDataMap::iterator it = per_compositor_data_.find(compositor); |
| 361 if (it == per_compositor_data_.end()) |
| 362 return scoped_ptr<SurfaceCapturer>(); |
| 363 PerCompositorData* data = it->second; |
| 364 DCHECK(data); |
| 365 return scoped_ptr<SurfaceCapturer>(new BrowserCompositorOutputSurfaceCapturer( |
| 366 &output_surface_map_, data->surface_id, client)); |
| 367 } |
| 368 |
356 GLHelper* GpuProcessTransportFactory::GetGLHelper() { | 369 GLHelper* GpuProcessTransportFactory::GetGLHelper() { |
357 if (!gl_helper_) { | 370 if (!gl_helper_) { |
358 CreateSharedContextLazy(); | 371 CreateSharedContextLazy(); |
359 WebGraphicsContext3DCommandBufferImpl* context_for_main_thread = | 372 WebGraphicsContext3DCommandBufferImpl* context_for_main_thread = |
360 shared_contexts_main_thread_->Context3d(); | 373 shared_contexts_main_thread_->Context3d(); |
361 gl_helper_.reset(new GLHelper(context_for_main_thread)); | 374 gl_helper_.reset(new GLHelper(context_for_main_thread)); |
362 } | 375 } |
363 return gl_helper_.get(); | 376 return gl_helper_.get(); |
364 } | 377 } |
365 | 378 |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
517 observer_list_, | 530 observer_list_, |
518 OnLostResources()); | 531 OnLostResources()); |
519 | 532 |
520 // Kill things that use the shared context before killing the shared context. | 533 // Kill things that use the shared context before killing the shared context. |
521 lost_gl_helper.reset(); | 534 lost_gl_helper.reset(); |
522 lost_shared_contexts_main_thread = NULL; | 535 lost_shared_contexts_main_thread = NULL; |
523 lost_shared_contexts_compositor_thread = NULL; | 536 lost_shared_contexts_compositor_thread = NULL; |
524 } | 537 } |
525 | 538 |
526 } // namespace content | 539 } // namespace content |
OLD | NEW |