Index: cc/trees/thread_proxy.cc |
diff --git a/cc/trees/thread_proxy.cc b/cc/trees/thread_proxy.cc |
index c8b8cc411a5d78e98e7f0b4ae4a55f02186391aa..24f14ed7c41bde4f6202aca50cd8d127b1ee88d6 100644 |
--- a/cc/trees/thread_proxy.cc |
+++ b/cc/trees/thread_proxy.cc |
@@ -236,9 +236,8 @@ void ThreadProxy::OnOutputSurfaceInitializeAttempted( |
DCHECK(IsMainThread()); |
DCHECK(layer_tree_host_); |
- if (success) { |
+ if (success) |
renderer_capabilities_main_thread_copy_ = capabilities; |
- } |
LayerTreeHost::CreateResult result = |
layer_tree_host_->OnCreateAndInitializeOutputSurfaceAttempted(success); |
@@ -287,6 +286,22 @@ void ThreadProxy::SetNeedsCommit() { |
&ThreadProxy::SetNeedsCommitOnImplThread, impl_thread_weak_ptr_)); |
} |
+void ThreadProxy::DidUpdateCapabilitiesOnImplThread() { |
+ DCHECK(IsImplThread()); |
+ UpdateCapabilitiesOnImplThread(); |
+ Proxy::MainThread()->PostTask( |
+ base::Bind(&ThreadProxy::DidUpdateCapabilities, |
+ main_thread_weak_ptr_, |
+ layer_tree_host_impl_->GetRendererCapabilities())); |
+} |
+ |
+void ThreadProxy::DidUpdateCapabilities( |
+ const RendererCapabilities& capabilities) { |
+ DCHECK(IsMainThread()); |
+ renderer_capabilities_main_thread_copy_ = capabilities; |
+ layer_tree_host_->DidUpdateCapabilities(); |
+} |
+ |
void ThreadProxy::DidLoseOutputSurfaceOnImplThread() { |
DCHECK(IsImplThread()); |
TRACE_EVENT0("cc", "ThreadProxy::DidLoseOutputSurfaceOnImplThread"); |
@@ -1152,19 +1167,7 @@ void ThreadProxy::InitializeOutputSurfaceOnImplThread( |
if (*success) { |
*capabilities = layer_tree_host_impl_->GetRendererCapabilities(); |
- scheduler_on_impl_thread_->SetSwapBuffersCompleteSupported( |
- capabilities->using_swap_complete_callback); |
- |
- OutputSurface* output_surface_ptr = layer_tree_host_impl_->output_surface(); |
- DCHECK(output_surface_ptr); |
- int max_frames_pending = |
- output_surface_ptr->capabilities().max_frames_pending; |
- if (max_frames_pending <= 0) |
- max_frames_pending = FrameRateController::DEFAULT_MAX_FRAMES_PENDING; |
- if (output_surface_ptr->capabilities().has_parent_compositor) |
- max_frames_pending = 1; |
- |
- scheduler_on_impl_thread_->SetMaxFramesPending(max_frames_pending); |
+ UpdateCapabilitiesOnImplThread(); |
layer_tree_host_impl_->resource_provider()-> |
set_offscreen_context_provider(offscreen_context_provider); |
@@ -1177,6 +1180,26 @@ void ThreadProxy::InitializeOutputSurfaceOnImplThread( |
completion->Signal(); |
} |
+void ThreadProxy::UpdateCapabilitiesOnImplThread() { |
+ DCHECK(IsImplThread()); |
+ |
+ RendererCapabilities capabilities = |
+ layer_tree_host_impl_->GetRendererCapabilities(); |
+ scheduler_on_impl_thread_->SetSwapBuffersCompleteSupported( |
+ capabilities.using_swap_complete_callback); |
+ |
+ OutputSurface* output_surface_ptr = layer_tree_host_impl_->output_surface(); |
+ DCHECK(output_surface_ptr); |
+ int max_frames_pending = |
+ output_surface_ptr->capabilities().max_frames_pending; |
+ if (max_frames_pending <= 0) |
+ max_frames_pending = FrameRateController::DEFAULT_MAX_FRAMES_PENDING; |
+ if (output_surface_ptr->capabilities().has_parent_compositor) |
+ max_frames_pending = 1; |
+ |
+ scheduler_on_impl_thread_->SetMaxFramesPending(max_frames_pending); |
+} |
+ |
void ThreadProxy::FinishGLOnImplThread(CompletionEvent* completion) { |
TRACE_EVENT0("cc", "ThreadProxy::FinishGLOnImplThread"); |
DCHECK(IsImplThread()); |