Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(708)

Side by Side Diff: cc/trees/thread_proxy.cc

Issue 85693007: cc: Defer first OutputSurface creation until client is ready (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « cc/trees/thread_proxy.h ('k') | chrome/test/gpu/gpu_feature_browsertest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 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 "cc/trees/thread_proxy.h" 5 #include "cc/trees/thread_proxy.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/auto_reset.h" 9 #include "base/auto_reset.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 void ThreadProxy::UpdateBackgroundAnimateTicking() { 259 void ThreadProxy::UpdateBackgroundAnimateTicking() {
260 layer_tree_host_impl_->UpdateBackgroundAnimateTicking( 260 layer_tree_host_impl_->UpdateBackgroundAnimateTicking(
261 !scheduler_on_impl_thread_->WillDrawIfNeeded() && 261 !scheduler_on_impl_thread_->WillDrawIfNeeded() &&
262 layer_tree_host_impl_->active_tree()->root_layer()); 262 layer_tree_host_impl_->active_tree()->root_layer());
263 } 263 }
264 264
265 void ThreadProxy::DoCreateAndInitializeOutputSurface() { 265 void ThreadProxy::DoCreateAndInitializeOutputSurface() {
266 TRACE_EVENT0("cc", "ThreadProxy::DoCreateAndInitializeOutputSurface"); 266 TRACE_EVENT0("cc", "ThreadProxy::DoCreateAndInitializeOutputSurface");
267 DCHECK(IsMainThread()); 267 DCHECK(IsMainThread());
268 268
269 scoped_ptr<OutputSurface> output_surface = first_output_surface_.Pass(); 269 scoped_ptr<OutputSurface> output_surface =
270 if (!output_surface) 270 layer_tree_host()->CreateOutputSurface();
271 output_surface = layer_tree_host()->CreateOutputSurface();
272 271
273 RendererCapabilities capabilities; 272 RendererCapabilities capabilities;
274 bool success = !!output_surface; 273 bool success = !!output_surface;
275 if (!success) { 274 if (!success) {
276 OnOutputSurfaceInitializeAttempted(false, capabilities); 275 OnOutputSurfaceInitializeAttempted(false, capabilities);
277 return; 276 return;
278 } 277 }
279 278
280 scoped_refptr<ContextProvider> offscreen_context_provider; 279 scoped_refptr<ContextProvider> offscreen_context_provider;
281 if (created_offscreen_context_provider_) { 280 if (created_offscreen_context_provider_) {
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after
634 DCHECK(IsMainThread() || IsMainThreadBlocked()); 633 DCHECK(IsMainThread() || IsMainThreadBlocked());
635 return layer_tree_host()->contents_texture_manager(); 634 return layer_tree_host()->contents_texture_manager();
636 } 635 }
637 636
638 PrioritizedResourceManager* 637 PrioritizedResourceManager*
639 ThreadProxy::contents_texture_manager_on_impl_thread() { 638 ThreadProxy::contents_texture_manager_on_impl_thread() {
640 DCHECK(IsImplThread()); 639 DCHECK(IsImplThread());
641 return contents_texture_manager_unsafe_; 640 return contents_texture_manager_unsafe_;
642 } 641 }
643 642
644 void ThreadProxy::Start(scoped_ptr<OutputSurface> first_output_surface) { 643 void ThreadProxy::Start() {
645 DCHECK(IsMainThread()); 644 DCHECK(IsMainThread());
646 DCHECK(Proxy::HasImplThread()); 645 DCHECK(Proxy::HasImplThread());
647 DCHECK(first_output_surface);
648 646
649 // Create LayerTreeHostImpl. 647 // Create LayerTreeHostImpl.
650 DebugScopedSetMainThreadBlocked main_thread_blocked(this); 648 DebugScopedSetMainThreadBlocked main_thread_blocked(this);
651 CompletionEvent completion; 649 CompletionEvent completion;
652 Proxy::ImplThreadTaskRunner()->PostTask( 650 Proxy::ImplThreadTaskRunner()->PostTask(
653 FROM_HERE, 651 FROM_HERE,
654 base::Bind(&ThreadProxy::InitializeImplOnImplThread, 652 base::Bind(&ThreadProxy::InitializeImplOnImplThread,
655 base::Unretained(this), 653 base::Unretained(this),
656 &completion)); 654 &completion));
657 completion.Wait(); 655 completion.Wait();
658 656
659 main_thread_weak_ptr_ = weak_factory_.GetWeakPtr(); 657 main_thread_weak_ptr_ = weak_factory_.GetWeakPtr();
660 first_output_surface_ = first_output_surface.Pass();
661 658
662 started_ = true; 659 started_ = true;
663 } 660 }
664 661
665 void ThreadProxy::Stop() { 662 void ThreadProxy::Stop() {
666 TRACE_EVENT0("cc", "ThreadProxy::Stop"); 663 TRACE_EVENT0("cc", "ThreadProxy::Stop");
667 DCHECK(IsMainThread()); 664 DCHECK(IsMainThread());
668 DCHECK(started_); 665 DCHECK(started_);
669 666
670 // Synchronously finishes pending GL operations and deletes the impl. 667 // Synchronously finishes pending GL operations and deletes the impl.
(...skipping 974 matching lines...) Expand 10 before | Expand all | Expand 10 after
1645 commit_to_activate_duration_history_.InsertSample( 1642 commit_to_activate_duration_history_.InsertSample(
1646 base::TimeTicks::HighResNow() - commit_complete_time_); 1643 base::TimeTicks::HighResNow() - commit_complete_time_);
1647 } 1644 }
1648 1645
1649 void ThreadProxy::DidManageTiles() { 1646 void ThreadProxy::DidManageTiles() {
1650 DCHECK(IsImplThread()); 1647 DCHECK(IsImplThread());
1651 scheduler_on_impl_thread_->DidManageTiles(); 1648 scheduler_on_impl_thread_->DidManageTiles();
1652 } 1649 }
1653 1650
1654 } // namespace cc 1651 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/thread_proxy.h ('k') | chrome/test/gpu/gpu_feature_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698