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

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

Issue 812543002: Update from https://crrev.com/308331 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: 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
« no previous file with comments | « cc/trees/layer_tree_host.h ('k') | cc/trees/layer_tree_host_client.h » ('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/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_shrink_blink_size_(false), 119 top_controls_shrink_blink_size_(false),
121 top_controls_height_(0.f), 120 top_controls_height_(0.f),
122 top_controls_content_offset_(0.f), 121 top_controls_content_offset_(0.f),
123 device_scale_factor_(1.f), 122 device_scale_factor_(1.f),
124 visible_(true), 123 visible_(true),
125 page_scale_factor_(1.f), 124 page_scale_factor_(1.f),
126 min_page_scale_factor_(1.f), 125 min_page_scale_factor_(1.f),
127 max_page_scale_factor_(1.f), 126 max_page_scale_factor_(1.f),
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 } 209 }
211 210
212 void LayerTreeHost::SetLayerTreeHostClientReady() { 211 void LayerTreeHost::SetLayerTreeHostClientReady() {
213 proxy_->SetLayerTreeHostClientReady(); 212 proxy_->SetLayerTreeHostClientReady();
214 } 213 }
215 214
216 static void LayerTreeHostOnOutputSurfaceCreatedCallback(Layer* layer) { 215 static void LayerTreeHostOnOutputSurfaceCreatedCallback(Layer* layer) {
217 layer->OnOutputSurfaceCreated(); 216 layer->OnOutputSurfaceCreated();
218 } 217 }
219 218
220 void LayerTreeHost::OnCreateAndInitializeOutputSurfaceAttempted(bool success) {
221 DCHECK(output_surface_lost_);
222 TRACE_EVENT1("cc",
223 "LayerTreeHost::OnCreateAndInitializeOutputSurfaceAttempted",
224 "success",
225 success);
226
227 if (!success) {
228 // Tolerate a certain number of recreation failures to work around races
229 // in the output-surface-lost machinery.
230 ++num_failed_recreate_attempts_;
231 if (num_failed_recreate_attempts_ >= 5)
232 LOG(FATAL) << "Failed to create a fallback OutputSurface.";
233 client_->DidFailToInitializeOutputSurface();
234 return;
235 }
236
237 output_surface_lost_ = false;
238
239 if (!contents_texture_manager_ && !settings_.impl_side_painting) {
240 contents_texture_manager_ =
241 PrioritizedResourceManager::Create(proxy_.get());
242 surface_memory_placeholder_ =
243 contents_texture_manager_->CreateTexture(gfx::Size(), RGBA_8888);
244 }
245
246 if (root_layer()) {
247 LayerTreeHostCommon::CallFunctionForSubtree(
248 root_layer(), base::Bind(&LayerTreeHostOnOutputSurfaceCreatedCallback));
249 }
250
251 client_->DidInitializeOutputSurface();
252 }
253
254 void LayerTreeHost::DeleteContentsTexturesOnImplThread( 219 void LayerTreeHost::DeleteContentsTexturesOnImplThread(
255 ResourceProvider* resource_provider) { 220 ResourceProvider* resource_provider) {
256 DCHECK(proxy_->IsImplThread()); 221 DCHECK(proxy_->IsImplThread());
257 if (contents_texture_manager_) 222 if (contents_texture_manager_)
258 contents_texture_manager_->ClearAllMemory(resource_provider); 223 contents_texture_manager_->ClearAllMemory(resource_provider);
259 } 224 }
260 225
261 void LayerTreeHost::DidBeginMainFrame() { 226 void LayerTreeHost::DidBeginMainFrame() {
262 client_->DidBeginMainFrame(); 227 client_->DidBeginMainFrame();
263 } 228 }
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 sync_tree->ForceRedrawNextActivation(); 286 sync_tree->ForceRedrawNextActivation();
322 next_commit_forces_redraw_ = false; 287 next_commit_forces_redraw_ = false;
323 } 288 }
324 289
325 sync_tree->set_source_frame_number(source_frame_number()); 290 sync_tree->set_source_frame_number(source_frame_number());
326 291
327 if (needs_full_tree_sync_) { 292 if (needs_full_tree_sync_) {
328 sync_tree->SetRootLayer(TreeSynchronizer::SynchronizeTrees( 293 sync_tree->SetRootLayer(TreeSynchronizer::SynchronizeTrees(
329 root_layer(), sync_tree->DetachLayerTree(), sync_tree)); 294 root_layer(), sync_tree->DetachLayerTree(), sync_tree));
330 } 295 }
331
332 {
333 TRACE_EVENT0("cc", "LayerTreeHost::PushProperties");
334 TreeSynchronizer::PushProperties(root_layer(), sync_tree->root_layer());
335 }
336
337 sync_tree->set_needs_full_tree_sync(needs_full_tree_sync_); 296 sync_tree->set_needs_full_tree_sync(needs_full_tree_sync_);
338 needs_full_tree_sync_ = false; 297 needs_full_tree_sync_ = false;
339 298
340 if (hud_layer_.get()) { 299 if (hud_layer_.get()) {
341 LayerImpl* hud_impl = LayerTreeHostCommon::FindLayerInSubtree( 300 LayerImpl* hud_impl = LayerTreeHostCommon::FindLayerInSubtree(
342 sync_tree->root_layer(), hud_layer_->id()); 301 sync_tree->root_layer(), hud_layer_->id());
343 sync_tree->set_hud_layer(static_cast<HeadsUpDisplayLayerImpl*>(hud_impl)); 302 sync_tree->set_hud_layer(static_cast<HeadsUpDisplayLayerImpl*>(hud_impl));
344 } else { 303 } else {
345 sync_tree->set_hud_layer(NULL); 304 sync_tree->set_hud_layer(NULL);
346 } 305 }
347 306
348 sync_tree->set_background_color(background_color_); 307 sync_tree->set_background_color(background_color_);
349 sync_tree->set_has_transparent_background(has_transparent_background_); 308 sync_tree->set_has_transparent_background(has_transparent_background_);
350 309
351 if (page_scale_layer_.get() && inner_viewport_scroll_layer_.get()) { 310 if (page_scale_layer_.get() && inner_viewport_scroll_layer_.get()) {
352 sync_tree->SetViewportLayersFromIds( 311 sync_tree->SetViewportLayersFromIds(
353 overscroll_elasticity_layer_.get() ? overscroll_elasticity_layer_->id() 312 overscroll_elasticity_layer_.get() ? overscroll_elasticity_layer_->id()
354 : Layer::INVALID_ID, 313 : Layer::INVALID_ID,
355 page_scale_layer_->id(), inner_viewport_scroll_layer_->id(), 314 page_scale_layer_->id(), inner_viewport_scroll_layer_->id(),
356 outer_viewport_scroll_layer_.get() ? outer_viewport_scroll_layer_->id() 315 outer_viewport_scroll_layer_.get() ? outer_viewport_scroll_layer_->id()
357 : Layer::INVALID_ID); 316 : Layer::INVALID_ID);
317 DCHECK(inner_viewport_scroll_layer_->IsContainerForFixedPositionLayers());
358 } else { 318 } else {
359 sync_tree->ClearViewportLayers(); 319 sync_tree->ClearViewportLayers();
360 } 320 }
361 321
362 sync_tree->RegisterSelection(selection_start_, selection_end_); 322 sync_tree->RegisterSelection(selection_start_, selection_end_);
363 323
364 sync_tree->PushPageScaleFromMainThread( 324 sync_tree->PushPageScaleFromMainThread(
365 page_scale_factor_, min_page_scale_factor_, max_page_scale_factor_); 325 page_scale_factor_, min_page_scale_factor_, max_page_scale_factor_);
366 sync_tree->elastic_overscroll()->PushFromMainThread(elastic_overscroll_); 326 sync_tree->elastic_overscroll()->PushFromMainThread(elastic_overscroll_);
367 if (sync_tree->IsActiveTree()) 327 if (sync_tree->IsActiveTree())
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 368
409 DCHECK(!sync_tree->ViewportSizeInvalid()); 369 DCHECK(!sync_tree->ViewportSizeInvalid());
410 370
411 if (new_impl_tree_has_no_evicted_resources) { 371 if (new_impl_tree_has_no_evicted_resources) {
412 if (sync_tree->ContentsTexturesPurged()) 372 if (sync_tree->ContentsTexturesPurged())
413 sync_tree->ResetContentsTexturesPurged(); 373 sync_tree->ResetContentsTexturesPurged();
414 } 374 }
415 375
416 sync_tree->set_has_ever_been_drawn(false); 376 sync_tree->set_has_ever_been_drawn(false);
417 377
378 {
379 TRACE_EVENT0("cc", "LayerTreeHost::PushProperties");
380 TreeSynchronizer::PushProperties(root_layer(), sync_tree->root_layer());
381 }
382
418 micro_benchmark_controller_.ScheduleImplBenchmarks(host_impl); 383 micro_benchmark_controller_.ScheduleImplBenchmarks(host_impl);
419 } 384 }
420 385
421 void LayerTreeHost::WillCommit() { 386 void LayerTreeHost::WillCommit() {
422 client_->WillCommit(); 387 client_->WillCommit();
423 } 388 }
424 389
425 void LayerTreeHost::UpdateHudLayer() { 390 void LayerTreeHost::UpdateHudLayer() {
426 if (debug_state_.ShowHudInfo()) { 391 if (debug_state_.ShowHudInfo()) {
427 if (!hud_layer_.get()) 392 if (!hud_layer_.get())
428 hud_layer_ = HeadsUpDisplayLayer::Create(); 393 hud_layer_ = HeadsUpDisplayLayer::Create();
429 394
430 if (root_layer_.get() && !hud_layer_->parent()) 395 if (root_layer_.get() && !hud_layer_->parent())
431 root_layer_->AddChild(hud_layer_); 396 root_layer_->AddChild(hud_layer_);
432 } else if (hud_layer_.get()) { 397 } else if (hud_layer_.get()) {
433 hud_layer_->RemoveFromParent(); 398 hud_layer_->RemoveFromParent();
434 hud_layer_ = NULL; 399 hud_layer_ = NULL;
435 } 400 }
436 } 401 }
437 402
438 void LayerTreeHost::CommitComplete() { 403 void LayerTreeHost::CommitComplete() {
439 source_frame_number_++; 404 source_frame_number_++;
440 client_->DidCommit(); 405 client_->DidCommit();
441 } 406 }
442 407
443 void LayerTreeHost::SetOutputSurface(scoped_ptr<OutputSurface> surface) { 408 void LayerTreeHost::SetOutputSurface(scoped_ptr<OutputSurface> surface) {
409 TRACE_EVENT0("cc", "LayerTreeHost::SetOutputSurface");
410 DCHECK(output_surface_lost_);
411 DCHECK(surface);
412
444 proxy_->SetOutputSurface(surface.Pass()); 413 proxy_->SetOutputSurface(surface.Pass());
445 } 414 }
446 415
447 void LayerTreeHost::RequestNewOutputSurface() { 416 void LayerTreeHost::RequestNewOutputSurface() {
448 client_->RequestNewOutputSurface(num_failed_recreate_attempts_ >= 4); 417 client_->RequestNewOutputSurface();
418 }
419
420 void LayerTreeHost::DidInitializeOutputSurface() {
421 output_surface_lost_ = false;
422
423 if (!contents_texture_manager_ && !settings_.impl_side_painting) {
424 contents_texture_manager_ =
425 PrioritizedResourceManager::Create(proxy_.get());
426 surface_memory_placeholder_ =
427 contents_texture_manager_->CreateTexture(gfx::Size(), RGBA_8888);
428 }
429
430 if (root_layer()) {
431 LayerTreeHostCommon::CallFunctionForSubtree(
432 root_layer(), base::Bind(&LayerTreeHostOnOutputSurfaceCreatedCallback));
433 }
434
435 client_->DidInitializeOutputSurface();
436 }
437
438 void LayerTreeHost::DidFailToInitializeOutputSurface() {
439 DCHECK(output_surface_lost_);
440 client_->DidFailToInitializeOutputSurface();
449 } 441 }
450 442
451 scoped_ptr<LayerTreeHostImpl> LayerTreeHost::CreateLayerTreeHostImpl( 443 scoped_ptr<LayerTreeHostImpl> LayerTreeHost::CreateLayerTreeHostImpl(
452 LayerTreeHostImplClient* client) { 444 LayerTreeHostImplClient* client) {
453 DCHECK(proxy_->IsImplThread()); 445 DCHECK(proxy_->IsImplThread());
454 scoped_ptr<LayerTreeHostImpl> host_impl = 446 scoped_ptr<LayerTreeHostImpl> host_impl =
455 LayerTreeHostImpl::Create(settings_, 447 LayerTreeHostImpl::Create(settings_,
456 client, 448 client,
457 proxy_.get(), 449 proxy_.get(),
458 rendering_stats_instrumentation_.get(), 450 rendering_stats_instrumentation_.get(),
(...skipping 12 matching lines...) Expand all
471 return host_impl.Pass(); 463 return host_impl.Pass();
472 } 464 }
473 465
474 void LayerTreeHost::DidLoseOutputSurface() { 466 void LayerTreeHost::DidLoseOutputSurface() {
475 TRACE_EVENT0("cc", "LayerTreeHost::DidLoseOutputSurface"); 467 TRACE_EVENT0("cc", "LayerTreeHost::DidLoseOutputSurface");
476 DCHECK(proxy_->IsMainThread()); 468 DCHECK(proxy_->IsMainThread());
477 469
478 if (output_surface_lost_) 470 if (output_surface_lost_)
479 return; 471 return;
480 472
481 num_failed_recreate_attempts_ = 0;
482 output_surface_lost_ = true; 473 output_surface_lost_ = true;
483 SetNeedsCommit(); 474 SetNeedsCommit();
484 } 475 }
485 476
486 void LayerTreeHost::FinishAllRendering() { 477 void LayerTreeHost::FinishAllRendering() {
487 proxy_->FinishAllRendering(); 478 proxy_->FinishAllRendering();
488 } 479 }
489 480
490 void LayerTreeHost::SetDeferCommits(bool defer_commits) { 481 void LayerTreeHost::SetDeferCommits(bool defer_commits) {
491 proxy_->SetDeferCommits(defer_commits); 482 proxy_->SetDeferCommits(defer_commits);
(...skipping 899 matching lines...) Expand 10 before | Expand all | Expand 10 after
1391 bool children_need_begin_frames) const { 1382 bool children_need_begin_frames) const {
1392 proxy_->SetChildrenNeedBeginFrames(children_need_begin_frames); 1383 proxy_->SetChildrenNeedBeginFrames(children_need_begin_frames);
1393 } 1384 }
1394 1385
1395 void LayerTreeHost::SendBeginFramesToChildren( 1386 void LayerTreeHost::SendBeginFramesToChildren(
1396 const BeginFrameArgs& args) const { 1387 const BeginFrameArgs& args) const {
1397 client_->SendBeginFramesToChildren(args); 1388 client_->SendBeginFramesToChildren(args);
1398 } 1389 }
1399 1390
1400 } // namespace cc 1391 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host.h ('k') | cc/trees/layer_tree_host_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698