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

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

Issue 738983002: Move output surface fallback from cc to embedders (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 6 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
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/layer_tree_host.h" 5 #include "cc/trees/layer_tree_host.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <stack> 8 #include <stack>
9 #include <string> 9 #include <string>
10 10
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, 107 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
108 const LayerTreeSettings& settings) 108 const LayerTreeSettings& settings)
109 : micro_benchmark_controller_(this), 109 : micro_benchmark_controller_(this),
110 next_ui_resource_id_(1), 110 next_ui_resource_id_(1),
111 inside_begin_main_frame_(false), 111 inside_begin_main_frame_(false),
112 needs_full_tree_sync_(true), 112 needs_full_tree_sync_(true),
113 client_(client), 113 client_(client),
114 source_frame_number_(0), 114 source_frame_number_(0),
115 rendering_stats_instrumentation_(RenderingStatsInstrumentation::Create()), 115 rendering_stats_instrumentation_(RenderingStatsInstrumentation::Create()),
116 output_surface_lost_(true), 116 output_surface_lost_(true),
117 num_failed_recreate_attempts_(0),
118 settings_(settings), 117 settings_(settings),
119 debug_state_(settings.initial_debug_state), 118 debug_state_(settings.initial_debug_state),
120 top_controls_layout_height_(0.f), 119 top_controls_layout_height_(0.f),
121 top_controls_content_offset_(0.f), 120 top_controls_content_offset_(0.f),
122 device_scale_factor_(1.f), 121 device_scale_factor_(1.f),
123 visible_(true), 122 visible_(true),
124 page_scale_factor_(1.f), 123 page_scale_factor_(1.f),
125 min_page_scale_factor_(1.f), 124 min_page_scale_factor_(1.f),
126 max_page_scale_factor_(1.f), 125 max_page_scale_factor_(1.f),
127 has_gpu_rasterization_trigger_(false), 126 has_gpu_rasterization_trigger_(false),
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 } 208 }
210 209
211 void LayerTreeHost::SetLayerTreeHostClientReady() { 210 void LayerTreeHost::SetLayerTreeHostClientReady() {
212 proxy_->SetLayerTreeHostClientReady(); 211 proxy_->SetLayerTreeHostClientReady();
213 } 212 }
214 213
215 static void LayerTreeHostOnOutputSurfaceCreatedCallback(Layer* layer) { 214 static void LayerTreeHostOnOutputSurfaceCreatedCallback(Layer* layer) {
216 layer->OnOutputSurfaceCreated(); 215 layer->OnOutputSurfaceCreated();
217 } 216 }
218 217
219 void LayerTreeHost::OnCreateAndInitializeOutputSurfaceAttempted(bool success) {
220 DCHECK(output_surface_lost_);
221 TRACE_EVENT1("cc",
222 "LayerTreeHost::OnCreateAndInitializeOutputSurfaceAttempted",
223 "success",
224 success);
225
226 if (!success) {
227 // Tolerate a certain number of recreation failures to work around races
228 // in the output-surface-lost machinery.
229 ++num_failed_recreate_attempts_;
230 if (num_failed_recreate_attempts_ >= 5)
231 LOG(FATAL) << "Failed to create a fallback OutputSurface.";
232 client_->DidFailToInitializeOutputSurface();
233 return;
234 }
235
236 output_surface_lost_ = false;
237
238 if (!contents_texture_manager_ && !settings_.impl_side_painting) {
239 contents_texture_manager_ =
240 PrioritizedResourceManager::Create(proxy_.get());
241 surface_memory_placeholder_ =
242 contents_texture_manager_->CreateTexture(gfx::Size(), RGBA_8888);
243 }
244
245 if (root_layer()) {
246 LayerTreeHostCommon::CallFunctionForSubtree(
247 root_layer(), base::Bind(&LayerTreeHostOnOutputSurfaceCreatedCallback));
248 }
249
250 client_->DidInitializeOutputSurface();
251 }
252
253 void LayerTreeHost::DeleteContentsTexturesOnImplThread( 218 void LayerTreeHost::DeleteContentsTexturesOnImplThread(
254 ResourceProvider* resource_provider) { 219 ResourceProvider* resource_provider) {
255 DCHECK(proxy_->IsImplThread()); 220 DCHECK(proxy_->IsImplThread());
256 if (contents_texture_manager_) 221 if (contents_texture_manager_)
257 contents_texture_manager_->ClearAllMemory(resource_provider); 222 contents_texture_manager_->ClearAllMemory(resource_provider);
258 } 223 }
259 224
260 void LayerTreeHost::DidBeginMainFrame() { 225 void LayerTreeHost::DidBeginMainFrame() {
261 client_->DidBeginMainFrame(); 226 client_->DidBeginMainFrame();
262 } 227 }
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
425 hud_layer_ = NULL; 390 hud_layer_ = NULL;
426 } 391 }
427 } 392 }
428 393
429 void LayerTreeHost::CommitComplete() { 394 void LayerTreeHost::CommitComplete() {
430 source_frame_number_++; 395 source_frame_number_++;
431 client_->DidCommit(); 396 client_->DidCommit();
432 } 397 }
433 398
434 void LayerTreeHost::SetOutputSurface(scoped_ptr<OutputSurface> surface) { 399 void LayerTreeHost::SetOutputSurface(scoped_ptr<OutputSurface> surface) {
400 TRACE_EVENT0("cc", "LayerTreeHost::SetOutputSurface");
401 DCHECK(output_surface_lost_);
402 DCHECK(surface);
403
435 proxy_->SetOutputSurface(surface.Pass()); 404 proxy_->SetOutputSurface(surface.Pass());
436 } 405 }
437 406
438 void LayerTreeHost::RequestNewOutputSurface() { 407 void LayerTreeHost::RequestNewOutputSurface() {
439 client_->RequestNewOutputSurface(num_failed_recreate_attempts_ >= 4); 408 client_->RequestNewOutputSurface();
409 }
410
411 void LayerTreeHost::DidInitializeOutputSurface() {
412 output_surface_lost_ = false;
413
414 if (!contents_texture_manager_ && !settings_.impl_side_painting) {
415 contents_texture_manager_ =
416 PrioritizedResourceManager::Create(proxy_.get());
417 surface_memory_placeholder_ =
418 contents_texture_manager_->CreateTexture(gfx::Size(), RGBA_8888);
419 }
420
421 if (root_layer()) {
422 LayerTreeHostCommon::CallFunctionForSubtree(
423 root_layer(), base::Bind(&LayerTreeHostOnOutputSurfaceCreatedCallback));
424 }
425
426 client_->DidInitializeOutputSurface();
427 }
428
429 void LayerTreeHost::DidFailToInitializeOutputSurface() {
430 DCHECK(output_surface_lost_);
431 client_->DidFailToInitializeOutputSurface();
440 } 432 }
441 433
442 scoped_ptr<LayerTreeHostImpl> LayerTreeHost::CreateLayerTreeHostImpl( 434 scoped_ptr<LayerTreeHostImpl> LayerTreeHost::CreateLayerTreeHostImpl(
443 LayerTreeHostImplClient* client) { 435 LayerTreeHostImplClient* client) {
444 DCHECK(proxy_->IsImplThread()); 436 DCHECK(proxy_->IsImplThread());
445 scoped_ptr<LayerTreeHostImpl> host_impl = 437 scoped_ptr<LayerTreeHostImpl> host_impl =
446 LayerTreeHostImpl::Create(settings_, 438 LayerTreeHostImpl::Create(settings_,
447 client, 439 client,
448 proxy_.get(), 440 proxy_.get(),
449 rendering_stats_instrumentation_.get(), 441 rendering_stats_instrumentation_.get(),
(...skipping 12 matching lines...) Expand all
462 return host_impl.Pass(); 454 return host_impl.Pass();
463 } 455 }
464 456
465 void LayerTreeHost::DidLoseOutputSurface() { 457 void LayerTreeHost::DidLoseOutputSurface() {
466 TRACE_EVENT0("cc", "LayerTreeHost::DidLoseOutputSurface"); 458 TRACE_EVENT0("cc", "LayerTreeHost::DidLoseOutputSurface");
467 DCHECK(proxy_->IsMainThread()); 459 DCHECK(proxy_->IsMainThread());
468 460
469 if (output_surface_lost_) 461 if (output_surface_lost_)
470 return; 462 return;
471 463
472 num_failed_recreate_attempts_ = 0;
473 output_surface_lost_ = true; 464 output_surface_lost_ = true;
474 SetNeedsCommit(); 465 SetNeedsCommit();
475 } 466 }
476 467
477 void LayerTreeHost::FinishAllRendering() { 468 void LayerTreeHost::FinishAllRendering() {
478 proxy_->FinishAllRendering(); 469 proxy_->FinishAllRendering();
479 } 470 }
480 471
481 void LayerTreeHost::SetDeferCommits(bool defer_commits) { 472 void LayerTreeHost::SetDeferCommits(bool defer_commits) {
482 proxy_->SetDeferCommits(defer_commits); 473 proxy_->SetDeferCommits(defer_commits);
(...skipping 874 matching lines...) Expand 10 before | Expand all | Expand 10 after
1357 bool children_need_begin_frames) const { 1348 bool children_need_begin_frames) const {
1358 proxy_->SetChildrenNeedBeginFrames(children_need_begin_frames); 1349 proxy_->SetChildrenNeedBeginFrames(children_need_begin_frames);
1359 } 1350 }
1360 1351
1361 void LayerTreeHost::SendBeginFramesToChildren( 1352 void LayerTreeHost::SendBeginFramesToChildren(
1362 const BeginFrameArgs& args) const { 1353 const BeginFrameArgs& args) const {
1363 client_->SendBeginFramesToChildren(args); 1354 client_->SendBeginFramesToChildren(args);
1364 } 1355 }
1365 1356
1366 } // namespace cc 1357 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698