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

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

Issue 1131633003: cc: Use multiple PrepareTiles approaches Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix raster source detection Created 5 years, 7 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
« cc/trees/layer_tree_host_impl.cc ('K') | « cc/trees/thread_proxy.h ('k') | no next file » | 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 <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 void ThreadProxy::NotifyReadyToActivate() { 388 void ThreadProxy::NotifyReadyToActivate() {
389 TRACE_EVENT0("cc", "ThreadProxy::NotifyReadyToActivate"); 389 TRACE_EVENT0("cc", "ThreadProxy::NotifyReadyToActivate");
390 impl().scheduler->NotifyReadyToActivate(); 390 impl().scheduler->NotifyReadyToActivate();
391 } 391 }
392 392
393 void ThreadProxy::NotifyReadyToDraw() { 393 void ThreadProxy::NotifyReadyToDraw() {
394 TRACE_EVENT0("cc", "ThreadProxy::NotifyReadyToDraw"); 394 TRACE_EVENT0("cc", "ThreadProxy::NotifyReadyToDraw");
395 impl().scheduler->NotifyReadyToDraw(); 395 impl().scheduler->NotifyReadyToDraw();
396 } 396 }
397 397
398 void ThreadProxy::SetRequiresHighResToDraw(bool required) {
399 impl().scheduler->SetRequiresHighResToDraw(required);
400 }
401
398 void ThreadProxy::SetNeedsCommitOnImplThread() { 402 void ThreadProxy::SetNeedsCommitOnImplThread() {
399 TRACE_EVENT0("cc", "ThreadProxy::SetNeedsCommitOnImplThread"); 403 TRACE_EVENT0("cc", "ThreadProxy::SetNeedsCommitOnImplThread");
400 DCHECK(IsImplThread()); 404 DCHECK(IsImplThread());
401 impl().scheduler->SetNeedsCommit(); 405 impl().scheduler->SetNeedsCommit();
402 } 406 }
403 407
404 void ThreadProxy::SetVideoNeedsBeginFrames(bool needs_begin_frames) { 408 void ThreadProxy::SetVideoNeedsBeginFrames(bool needs_begin_frames) {
405 TRACE_EVENT1("cc", "ThreadProxy::SetVideoNeedsBeginFrames", 409 TRACE_EVENT1("cc", "ThreadProxy::SetVideoNeedsBeginFrames",
406 "needs_begin_frames", needs_begin_frames); 410 "needs_begin_frames", needs_begin_frames);
407 DCHECK(IsImplThread()); 411 DCHECK(IsImplThread());
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
504 DCHECK(IsImplThread()); 508 DCHECK(IsImplThread());
505 impl().scheduler->SetNeedsRedraw(); 509 impl().scheduler->SetNeedsRedraw();
506 } 510 }
507 511
508 void ThreadProxy::SetNeedsAnimateOnImplThread() { 512 void ThreadProxy::SetNeedsAnimateOnImplThread() {
509 TRACE_EVENT0("cc", "ThreadProxy::SetNeedsAnimateOnImplThread"); 513 TRACE_EVENT0("cc", "ThreadProxy::SetNeedsAnimateOnImplThread");
510 DCHECK(IsImplThread()); 514 DCHECK(IsImplThread());
511 impl().scheduler->SetNeedsAnimate(); 515 impl().scheduler->SetNeedsAnimate();
512 } 516 }
513 517
514 void ThreadProxy::SetNeedsPrepareTilesOnImplThread() { 518 void ThreadProxy::SetNeedsPrepareTilesOnImplThread(bool for_commit) {
515 DCHECK(IsImplThread()); 519 DCHECK(IsImplThread());
516 impl().scheduler->SetNeedsPrepareTiles(); 520 impl().scheduler->SetNeedsPrepareTiles(for_commit);
517 } 521 }
518 522
519 void ThreadProxy::SetNeedsRedrawRectOnImplThread(const gfx::Rect& damage_rect) { 523 void ThreadProxy::SetNeedsRedrawRectOnImplThread(const gfx::Rect& damage_rect) {
520 DCHECK(IsImplThread()); 524 DCHECK(IsImplThread());
521 impl().layer_tree_host_impl->SetViewportDamage(damage_rect); 525 impl().layer_tree_host_impl->SetViewportDamage(damage_rect);
522 SetNeedsRedrawOnImplThread(); 526 SetNeedsRedrawOnImplThread();
523 } 527 }
524 528
525 void ThreadProxy::MainThreadHasStoppedFlinging() { 529 void ThreadProxy::MainThreadHasStoppedFlinging() {
526 DCHECK(IsMainThread()); 530 DCHECK(IsMainThread());
(...skipping 525 matching lines...) Expand 10 before | Expand all | Expand 10 after
1052 DrawResult ThreadProxy::DrawSwapInternal(bool forced_draw) { 1056 DrawResult ThreadProxy::DrawSwapInternal(bool forced_draw) {
1053 TRACE_EVENT_SYNTHETIC_DELAY("cc.DrawAndSwap"); 1057 TRACE_EVENT_SYNTHETIC_DELAY("cc.DrawAndSwap");
1054 DrawResult result; 1058 DrawResult result;
1055 1059
1056 DCHECK(IsImplThread()); 1060 DCHECK(IsImplThread());
1057 DCHECK(impl().layer_tree_host_impl.get()); 1061 DCHECK(impl().layer_tree_host_impl.get());
1058 1062
1059 impl().timing_history.DidStartDrawing(); 1063 impl().timing_history.DidStartDrawing();
1060 base::AutoReset<bool> mark_inside(&impl().inside_draw, true); 1064 base::AutoReset<bool> mark_inside(&impl().inside_draw, true);
1061 1065
1062 if (impl().layer_tree_host_impl->pending_tree()) {
1063 bool update_lcd_text = false;
1064 impl().layer_tree_host_impl->pending_tree()->UpdateDrawProperties(
1065 update_lcd_text);
1066 }
1067
1068 // This method is called on a forced draw, regardless of whether we are able 1066 // This method is called on a forced draw, regardless of whether we are able
1069 // to produce a frame, as the calling site on main thread is blocked until its 1067 // to produce a frame, as the calling site on main thread is blocked until its
1070 // request completes, and we signal completion here. If CanDraw() is false, we 1068 // request completes, and we signal completion here. If CanDraw() is false, we
1071 // will indicate success=false to the caller, but we must still signal 1069 // will indicate success=false to the caller, but we must still signal
1072 // completion to avoid deadlock. 1070 // completion to avoid deadlock.
1073 1071
1074 // We guard PrepareToDraw() with CanDraw() because it always returns a valid 1072 // We guard PrepareToDraw() with CanDraw() because it always returns a valid
1075 // frame, so can only be used when such a frame is possible. Since 1073 // frame, so can only be used when such a frame is possible. Since
1076 // DrawLayers() depends on the result of PrepareToDraw(), it is guarded on 1074 // DrawLayers() depends on the result of PrepareToDraw(), it is guarded on
1077 // CanDraw() as well. 1075 // CanDraw() as well.
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after
1342 1340
1343 // New content always takes priority when the active tree has 1341 // New content always takes priority when the active tree has
1344 // evicted resources or there is an invalid viewport size. 1342 // evicted resources or there is an invalid viewport size.
1345 if (impl().layer_tree_host_impl->active_tree()->ContentsTexturesPurged() || 1343 if (impl().layer_tree_host_impl->active_tree()->ContentsTexturesPurged() ||
1346 impl().layer_tree_host_impl->active_tree()->ViewportSizeInvalid() || 1344 impl().layer_tree_host_impl->active_tree()->ViewportSizeInvalid() ||
1347 impl().layer_tree_host_impl->EvictedUIResourcesExist() || 1345 impl().layer_tree_host_impl->EvictedUIResourcesExist() ||
1348 impl().input_throttled_until_commit) { 1346 impl().input_throttled_until_commit) {
1349 // Once we enter NEW_CONTENTS_TAKES_PRIORITY mode, visible tiles on active 1347 // Once we enter NEW_CONTENTS_TAKES_PRIORITY mode, visible tiles on active
1350 // tree might be freed. We need to set RequiresHighResToDraw to ensure that 1348 // tree might be freed. We need to set RequiresHighResToDraw to ensure that
1351 // high res tiles will be required to activate pending tree. 1349 // high res tiles will be required to activate pending tree.
1352 impl().layer_tree_host_impl->SetRequiresHighResToDraw(); 1350 impl().layer_tree_host_impl->SetRequiresHighResToDraw(true);
1353 priority = NEW_CONTENT_TAKES_PRIORITY; 1351 priority = NEW_CONTENT_TAKES_PRIORITY;
1354 } 1352 }
1355 1353
1356 impl().layer_tree_host_impl->SetTreePriority(priority); 1354 impl().layer_tree_host_impl->SetTreePriority(priority);
1357 1355
1358 // Only put the scheduler in impl latency prioritization mode if we don't 1356 // Only put the scheduler in impl latency prioritization mode if we don't
1359 // have a scroll listener. This gives the scroll listener a better chance of 1357 // have a scroll listener. This gives the scroll listener a better chance of
1360 // handling scroll updates within the same frame. The tree itself is still 1358 // handling scroll updates within the same frame. The tree itself is still
1361 // kept in prefer smoothness mode to allow checkerboarding. 1359 // kept in prefer smoothness mode to allow checkerboarding.
1362 impl().scheduler->SetImplLatencyTakesPriority( 1360 impl().scheduler->SetImplLatencyTakesPriority(
(...skipping 26 matching lines...) Expand all
1389 DCHECK(impl().layer_tree_host_impl->settings().impl_side_painting); 1387 DCHECK(impl().layer_tree_host_impl->settings().impl_side_painting);
1390 impl().completion_event_for_commit_held_on_tree_activation->Signal(); 1388 impl().completion_event_for_commit_held_on_tree_activation->Signal();
1391 impl().completion_event_for_commit_held_on_tree_activation = NULL; 1389 impl().completion_event_for_commit_held_on_tree_activation = NULL;
1392 } 1390 }
1393 1391
1394 impl().timing_history.DidActivateSyncTree(); 1392 impl().timing_history.DidActivateSyncTree();
1395 impl().last_processed_begin_main_frame_args = 1393 impl().last_processed_begin_main_frame_args =
1396 impl().last_begin_main_frame_args; 1394 impl().last_begin_main_frame_args;
1397 } 1395 }
1398 1396
1399 void ThreadProxy::DidPrepareTiles() {
1400 DCHECK(IsImplThread());
1401 impl().scheduler->DidPrepareTiles();
1402 }
1403
1404 void ThreadProxy::DidCompletePageScaleAnimationOnImplThread() { 1397 void ThreadProxy::DidCompletePageScaleAnimationOnImplThread() {
1405 DCHECK(IsImplThread()); 1398 DCHECK(IsImplThread());
1406 Proxy::MainThreadTaskRunner()->PostTask( 1399 Proxy::MainThreadTaskRunner()->PostTask(
1407 FROM_HERE, base::Bind(&ThreadProxy::DidCompletePageScaleAnimation, 1400 FROM_HERE, base::Bind(&ThreadProxy::DidCompletePageScaleAnimation,
1408 main_thread_weak_ptr_)); 1401 main_thread_weak_ptr_));
1409 } 1402 }
1410 1403
1411 void ThreadProxy::OnDrawForOutputSurface() { 1404 void ThreadProxy::OnDrawForOutputSurface() {
1412 DCHECK(IsImplThread()); 1405 DCHECK(IsImplThread());
1413 impl().scheduler->OnDrawForOutputSurface(); 1406 impl().scheduler->OnDrawForOutputSurface();
1414 } 1407 }
1415 1408
1416 } // namespace cc 1409 } // namespace cc
OLDNEW
« cc/trees/layer_tree_host_impl.cc ('K') | « cc/trees/thread_proxy.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698