Index: content/renderer/render_widget.cc |
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc |
index 4ec16f2d177953a9ad1d950384084f77bfbe669a..a2e1064081b3803a7885edb4a7a74796ff1807cd 100644 |
--- a/content/renderer/render_widget.cc |
+++ b/content/renderer/render_widget.cc |
@@ -992,6 +992,7 @@ scoped_ptr<cc::OutputSurface> RenderWidget::CreateOutputSurface(bool fallback) { |
use_software = true; |
scoped_refptr<ContextProviderCommandBuffer> context_provider; |
+ scoped_refptr<ContextProviderCommandBuffer> worker_context_provider; |
if (!use_software) { |
context_provider = ContextProviderCommandBuffer::Create( |
CreateGraphicsContext3D(), "RenderCompositor"); |
@@ -999,14 +1000,21 @@ scoped_ptr<cc::OutputSurface> RenderWidget::CreateOutputSurface(bool fallback) { |
// Cause the compositor to wait and try again. |
return scoped_ptr<cc::OutputSurface>(); |
} |
+ |
+ worker_context_provider = ContextProviderCommandBuffer::Create( |
+ CreateGraphicsContext3D(), "RenderWorker"); |
+ if (!worker_context_provider.get()) { |
+ // Cause the compositor to wait and try again. |
+ return scoped_ptr<cc::OutputSurface>(); |
+ } |
} |
uint32 output_surface_id = next_output_surface_id_++; |
if (command_line.HasSwitch(switches::kEnableDelegatedRenderer)) { |
DCHECK(compositor_deps_->GetCompositorImplThreadTaskRunner()); |
return scoped_ptr<cc::OutputSurface>(new DelegatedCompositorOutputSurface( |
- routing_id(), output_surface_id, context_provider, nullptr, |
- frame_swap_message_queue_)); |
+ routing_id(), output_surface_id, context_provider, |
+ worker_context_provider, frame_swap_message_queue_)); |
} |
if (!context_provider.get()) { |
scoped_ptr<cc::SoftwareOutputDevice> software_device( |
@@ -1026,15 +1034,15 @@ scoped_ptr<cc::OutputSurface> RenderWidget::CreateOutputSurface(bool fallback) { |
if (base::SysInfo::IsLowEndDevice()) |
format = cc::RGB_565; |
return scoped_ptr<cc::OutputSurface>(new MailboxOutputSurface( |
- routing_id(), output_surface_id, context_provider, nullptr, |
- scoped_ptr<cc::SoftwareOutputDevice>(), frame_swap_message_queue_, |
- format)); |
+ routing_id(), output_surface_id, context_provider, |
+ worker_context_provider, scoped_ptr<cc::SoftwareOutputDevice>(), |
+ frame_swap_message_queue_, format)); |
} |
bool use_swap_compositor_frame_message = false; |
return scoped_ptr<cc::OutputSurface>(new CompositorOutputSurface( |
- routing_id(), output_surface_id, context_provider, nullptr, |
- scoped_ptr<cc::SoftwareOutputDevice>(), frame_swap_message_queue_, |
- use_swap_compositor_frame_message)); |
+ routing_id(), output_surface_id, context_provider, |
+ worker_context_provider, scoped_ptr<cc::SoftwareOutputDevice>(), |
+ frame_swap_message_queue_, use_swap_compositor_frame_message)); |
} |
void RenderWidget::OnSwapBuffersAborted() { |