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

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

Issue 504373002: Don't destroy RenderWidgetCompositor during DoDeferredClose (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 months 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
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/single_thread_proxy.h" 5 #include "cc/trees/single_thread_proxy.h"
6 6
7 #include "base/auto_reset.h" 7 #include "base/auto_reset.h"
8 #include "base/debug/trace_event.h" 8 #include "base/debug/trace_event.h"
9 #include "cc/debug/benchmark_instrumentation.h" 9 #include "cc/debug/benchmark_instrumentation.h"
10 #include "cc/output/context_provider.h" 10 #include "cc/output/context_provider.h"
(...skipping 25 matching lines...) Expand all
36 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner) 36 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner)
37 : Proxy(main_task_runner, NULL), 37 : Proxy(main_task_runner, NULL),
38 layer_tree_host_(layer_tree_host), 38 layer_tree_host_(layer_tree_host),
39 client_(client), 39 client_(client),
40 timing_history_(layer_tree_host->rendering_stats_instrumentation()), 40 timing_history_(layer_tree_host->rendering_stats_instrumentation()),
41 next_frame_is_newly_committed_frame_(false), 41 next_frame_is_newly_committed_frame_(false),
42 inside_draw_(false), 42 inside_draw_(false),
43 defer_commits_(false), 43 defer_commits_(false),
44 commit_was_deferred_(false), 44 commit_was_deferred_(false),
45 commit_requested_(false), 45 commit_requested_(false),
46 host_client_finished_(false),
46 weak_factory_(this) { 47 weak_factory_(this) {
47 TRACE_EVENT0("cc", "SingleThreadProxy::SingleThreadProxy"); 48 TRACE_EVENT0("cc", "SingleThreadProxy::SingleThreadProxy");
48 DCHECK(Proxy::IsMainThread()); 49 DCHECK(Proxy::IsMainThread());
49 DCHECK(layer_tree_host); 50 DCHECK(layer_tree_host);
50 51
51 // Impl-side painting not supported without threaded compositing. 52 // Impl-side painting not supported without threaded compositing.
52 CHECK(!layer_tree_host->settings().impl_side_painting) 53 CHECK(!layer_tree_host->settings().impl_side_painting)
53 << "Threaded compositing must be enabled to use impl-side painting."; 54 << "Threaded compositing must be enabled to use impl-side painting.";
54 } 55 }
55 56
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 SchedulerSettings scheduler_settings(layer_tree_host_->settings()); 91 SchedulerSettings scheduler_settings(layer_tree_host_->settings());
91 scheduler_on_impl_thread_ = Scheduler::Create(this, 92 scheduler_on_impl_thread_ = Scheduler::Create(this,
92 scheduler_settings, 93 scheduler_settings,
93 layer_tree_host_->id(), 94 layer_tree_host_->id(),
94 MainThreadTaskRunner()); 95 MainThreadTaskRunner());
95 scheduler_on_impl_thread_->SetCanStart(); 96 scheduler_on_impl_thread_->SetCanStart();
96 scheduler_on_impl_thread_->SetVisible(layer_tree_host_impl_->visible()); 97 scheduler_on_impl_thread_->SetVisible(layer_tree_host_impl_->visible());
97 } 98 }
98 } 99 }
99 100
101 void SingleThreadProxy::SetLayerTreeHostClientFinished() {
102 DCHECK(Proxy::IsMainThread());
103 host_client_finished_ = true;
104 }
105
100 void SingleThreadProxy::SetVisible(bool visible) { 106 void SingleThreadProxy::SetVisible(bool visible) {
101 TRACE_EVENT0("cc", "SingleThreadProxy::SetVisible"); 107 TRACE_EVENT0("cc", "SingleThreadProxy::SetVisible");
102 DebugScopedSetImplThread impl(this); 108 DebugScopedSetImplThread impl(this);
103 layer_tree_host_impl_->SetVisible(visible); 109 layer_tree_host_impl_->SetVisible(visible);
104 if (scheduler_on_impl_thread_) 110 if (scheduler_on_impl_thread_)
105 scheduler_on_impl_thread_->SetVisible(layer_tree_host_impl_->visible()); 111 scheduler_on_impl_thread_->SetVisible(layer_tree_host_impl_->visible());
106 // Changing visibility could change ShouldComposite(). 112 // Changing visibility could change ShouldComposite().
107 UpdateBackgroundAnimateTicking(); 113 UpdateBackgroundAnimateTicking();
108 } 114 }
109 115
110 void SingleThreadProxy::CreateAndInitializeOutputSurface() { 116 void SingleThreadProxy::CreateAndInitializeOutputSurface() {
111 TRACE_EVENT0( 117 TRACE_EVENT0(
112 "cc", "SingleThreadProxy::CreateAndInitializeOutputSurface"); 118 "cc", "SingleThreadProxy::CreateAndInitializeOutputSurface");
113 DCHECK(Proxy::IsMainThread()); 119 DCHECK(Proxy::IsMainThread());
114 DCHECK(layer_tree_host_->output_surface_lost()); 120 DCHECK(layer_tree_host_->output_surface_lost());
115 121
122 // TODO(enne): in the future this could get handled by asynchronous
123 // output surface creation where the host client could just decline
124 // to ever create a surface when shutting down.
125 if (host_client_finished_)
126 return;
127
116 scoped_ptr<OutputSurface> output_surface = 128 scoped_ptr<OutputSurface> output_surface =
117 layer_tree_host_->CreateOutputSurface(); 129 layer_tree_host_->CreateOutputSurface();
118 130
119 renderer_capabilities_for_main_thread_ = RendererCapabilities(); 131 renderer_capabilities_for_main_thread_ = RendererCapabilities();
120 132
121 bool success = !!output_surface; 133 bool success = !!output_surface;
122 if (success) { 134 if (success) {
123 DebugScopedSetMainThreadBlocked main_thread_blocked(this); 135 DebugScopedSetMainThreadBlocked main_thread_blocked(this);
124 DebugScopedSetImplThread impl(this); 136 DebugScopedSetImplThread impl(this);
125 layer_tree_host_->DeleteContentsTexturesOnImplThread( 137 layer_tree_host_->DeleteContentsTexturesOnImplThread(
(...skipping 571 matching lines...) Expand 10 before | Expand all | Expand 10 after
697 709
698 base::TimeDelta SingleThreadProxy::CommitToActivateDurationEstimate() { 710 base::TimeDelta SingleThreadProxy::CommitToActivateDurationEstimate() {
699 return timing_history_.CommitToActivateDurationEstimate(); 711 return timing_history_.CommitToActivateDurationEstimate();
700 } 712 }
701 713
702 void SingleThreadProxy::DidBeginImplFrameDeadline() { 714 void SingleThreadProxy::DidBeginImplFrameDeadline() {
703 layer_tree_host_impl_->ResetCurrentBeginFrameArgsForNextFrame(); 715 layer_tree_host_impl_->ResetCurrentBeginFrameArgsForNextFrame();
704 } 716 }
705 717
706 } // namespace cc 718 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698