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

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

Issue 23495022: CC: Add a scheduled action for ManageTiles (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add to AsValue Created 7 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
« 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 <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 520 matching lines...) Expand 10 before | Expand all | Expand 10 after
531 DCHECK(IsMainThread()); 531 DCHECK(IsMainThread());
532 return commit_requested_; 532 return commit_requested_;
533 } 533 }
534 534
535 void ThreadProxy::SetNeedsRedrawOnImplThread() { 535 void ThreadProxy::SetNeedsRedrawOnImplThread() {
536 DCHECK(IsImplThread()); 536 DCHECK(IsImplThread());
537 TRACE_EVENT0("cc", "ThreadProxy::SetNeedsRedrawOnImplThread"); 537 TRACE_EVENT0("cc", "ThreadProxy::SetNeedsRedrawOnImplThread");
538 scheduler_on_impl_thread_->SetNeedsRedraw(); 538 scheduler_on_impl_thread_->SetNeedsRedraw();
539 } 539 }
540 540
541 void ThreadProxy::SetNeedsManageTilesOnImplThread() {
542 DCHECK(IsImplThread());
543 TRACE_EVENT0("cc", "ThreadProxy::SetNeedsManageTilesOnImplThread");
544 scheduler_on_impl_thread_->SetNeedsManageTiles();
545 }
546
541 void ThreadProxy::SetNeedsRedrawRectOnImplThread(gfx::Rect damage_rect) { 547 void ThreadProxy::SetNeedsRedrawRectOnImplThread(gfx::Rect damage_rect) {
542 DCHECK(IsImplThread()); 548 DCHECK(IsImplThread());
543 layer_tree_host_impl_->SetViewportDamage(damage_rect); 549 layer_tree_host_impl_->SetViewportDamage(damage_rect);
544 SetNeedsRedrawOnImplThread(); 550 SetNeedsRedrawOnImplThread();
545 } 551 }
546 552
547 void ThreadProxy::SetSwapUsedIncompleteTileOnImplThread( 553 void ThreadProxy::SetSwapUsedIncompleteTileOnImplThread(
548 bool used_incomplete_tile) { 554 bool used_incomplete_tile) {
549 DCHECK(IsImplThread()); 555 DCHECK(IsImplThread());
550 if (used_incomplete_tile) { 556 if (used_incomplete_tile) {
(...skipping 579 matching lines...) Expand 10 before | Expand all | Expand 10 after
1130 base::TimeDelta::FromMilliseconds(1), 1136 base::TimeDelta::FromMilliseconds(1),
1131 base::TimeDelta::FromMilliseconds(100), 1137 base::TimeDelta::FromMilliseconds(100),
1132 50); 1138 50);
1133 UMA_HISTOGRAM_CUSTOM_TIMES("Renderer.DrawDurationOverestimate", 1139 UMA_HISTOGRAM_CUSTOM_TIMES("Renderer.DrawDurationOverestimate",
1134 draw_duration_overestimate, 1140 draw_duration_overestimate,
1135 base::TimeDelta::FromMilliseconds(1), 1141 base::TimeDelta::FromMilliseconds(1),
1136 base::TimeDelta::FromMilliseconds(100), 1142 base::TimeDelta::FromMilliseconds(100),
1137 50); 1143 50);
1138 } 1144 }
1139 1145
1140 // Update the tile state after drawing. This prevents manage tiles from
1141 // being in the critical path for getting things on screen, but still
1142 // makes sure that tile state is updated on a semi-regular basis.
1143 if (layer_tree_host_impl_->settings().impl_side_painting)
1144 layer_tree_host_impl_->ManageTiles();
1145
1146 return result; 1146 return result;
1147 } 1147 }
1148 1148
1149 void ThreadProxy::AcquireLayerTextures() { 1149 void ThreadProxy::AcquireLayerTextures() {
1150 // Called when the main thread needs to modify a layer texture that is used 1150 // Called when the main thread needs to modify a layer texture that is used
1151 // directly by the compositor. 1151 // directly by the compositor.
1152 // This method will block until the next compositor draw if there is a 1152 // This method will block until the next compositor draw if there is a
1153 // previously committed frame that is still undrawn. This is necessary to 1153 // previously committed frame that is still undrawn. This is necessary to
1154 // ensure that the main thread does not monopolize access to the textures. 1154 // ensure that the main thread does not monopolize access to the textures.
1155 DCHECK(IsMainThread()); 1155 DCHECK(IsMainThread());
(...skipping 24 matching lines...) Expand all
1180 texture_acquisition_completion_event_on_impl_thread_ = completion; 1180 texture_acquisition_completion_event_on_impl_thread_ = completion;
1181 scheduler_on_impl_thread_->SetMainThreadNeedsLayerTextures(); 1181 scheduler_on_impl_thread_->SetMainThreadNeedsLayerTextures();
1182 } 1182 }
1183 1183
1184 void ThreadProxy::ScheduledActionAcquireLayerTexturesForMainThread() { 1184 void ThreadProxy::ScheduledActionAcquireLayerTexturesForMainThread() {
1185 DCHECK(texture_acquisition_completion_event_on_impl_thread_); 1185 DCHECK(texture_acquisition_completion_event_on_impl_thread_);
1186 texture_acquisition_completion_event_on_impl_thread_->Signal(); 1186 texture_acquisition_completion_event_on_impl_thread_->Signal();
1187 texture_acquisition_completion_event_on_impl_thread_ = NULL; 1187 texture_acquisition_completion_event_on_impl_thread_ = NULL;
1188 } 1188 }
1189 1189
1190 void ThreadProxy::ScheduledActionManageTiles() {
1191 TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionManageTiles");
1192 // Only impl-side painting has threaded raster.
1193 if (layer_tree_host_impl_->settings().impl_side_painting)
reveman 2013/09/11 15:27:45 nit: maybe move this conditional to LTHI where we
brianderson 2013/09/11 17:10:30 Should we also have a DCHECK to make sure SetNeeds
epennerAtGoogle 2013/09/11 18:43:00 Done.
epennerAtGoogle 2013/09/11 18:43:00 Done.
1194 layer_tree_host_impl_->ManageTiles();
1195 }
1196
1190 DrawSwapReadbackResult ThreadProxy::ScheduledActionDrawAndSwapIfPossible() { 1197 DrawSwapReadbackResult ThreadProxy::ScheduledActionDrawAndSwapIfPossible() {
1191 TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionDrawAndSwap"); 1198 TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionDrawAndSwap");
1192 bool forced_draw = false; 1199 bool forced_draw = false;
1193 bool swap_requested = true; 1200 bool swap_requested = true;
1194 bool readback_requested = false; 1201 bool readback_requested = false;
1195 return DrawSwapReadbackInternal( 1202 return DrawSwapReadbackInternal(
1196 forced_draw, swap_requested, readback_requested); 1203 forced_draw, swap_requested, readback_requested);
1197 } 1204 }
1198 1205
1199 DrawSwapReadbackResult ThreadProxy::ScheduledActionDrawAndSwapForced() { 1206 DrawSwapReadbackResult ThreadProxy::ScheduledActionDrawAndSwapForced() {
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after
1550 completion_event_for_commit_held_on_tree_activation_ = NULL; 1557 completion_event_for_commit_held_on_tree_activation_ = NULL;
1551 } 1558 }
1552 1559
1553 UpdateBackgroundAnimateTicking(); 1560 UpdateBackgroundAnimateTicking();
1554 1561
1555 commit_to_activate_duration_history_.InsertSample( 1562 commit_to_activate_duration_history_.InsertSample(
1556 base::TimeTicks::HighResNow() - commit_complete_time_); 1563 base::TimeTicks::HighResNow() - commit_complete_time_);
1557 } 1564 }
1558 1565
1559 } // namespace cc 1566 } // 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