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

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

Issue 900073003: cc: Rework how picture layer tiling set gets into raster queues. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: removed unrelated changes Created 5 years, 10 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/layer_tree_host_impl.h" 5 #include "cc/trees/layer_tree_host_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 1184 matching lines...) Expand 10 before | Expand all | Expand 10 after
1195 DidModifyTilePriorities(); 1195 DidModifyTilePriorities();
1196 } 1196 }
1197 1197
1198 void LayerTreeHostImpl::DidModifyTilePriorities() { 1198 void LayerTreeHostImpl::DidModifyTilePriorities() {
1199 DCHECK(settings_.impl_side_painting); 1199 DCHECK(settings_.impl_side_painting);
1200 // Mark priorities as dirty and schedule a PrepareTiles(). 1200 // Mark priorities as dirty and schedule a PrepareTiles().
1201 tile_priorities_dirty_ = true; 1201 tile_priorities_dirty_ = true;
1202 client_->SetNeedsPrepareTilesOnImplThread(); 1202 client_->SetNeedsPrepareTilesOnImplThread();
1203 } 1203 }
1204 1204
1205 void LayerTreeHostImpl::GetPictureLayerImplPairs( 1205 bool LayerTreeHostImpl::PendingTreeExists() {
1206 std::vector<PictureLayerImpl::Pair>* layer_pairs, 1206 return !!pending_tree();
1207 bool need_valid_tile_priorities) const {
1208 DCHECK(layer_pairs->empty());
1209 for (std::vector<PictureLayerImpl*>::const_iterator it =
1210 picture_layers_.begin();
1211 it != picture_layers_.end();
1212 ++it) {
1213 PictureLayerImpl* layer = *it;
1214
1215 if (!layer->IsOnActiveOrPendingTree() ||
1216 (need_valid_tile_priorities && !layer->HasValidTilePriorities()))
1217 continue;
1218
1219 PictureLayerImpl* twin_layer = layer->GetPendingOrActiveTwinLayer();
1220
1221 // Ignore the twin layer when tile priorities are invalid.
1222 if (need_valid_tile_priorities && twin_layer &&
1223 !twin_layer->HasValidTilePriorities())
1224 twin_layer = NULL;
1225
1226 // If the current tree is ACTIVE_TREE, then always generate a layer_pair.
1227 // If current tree is PENDING_TREE, then only generate a layer_pair if
1228 // there is no twin layer.
1229 if (layer->GetTree() == ACTIVE_TREE) {
1230 DCHECK_IMPLIES(twin_layer, twin_layer->GetTree() == PENDING_TREE);
1231 layer_pairs->push_back(PictureLayerImpl::Pair(layer, twin_layer));
1232 } else if (!twin_layer) {
1233 DCHECK(layer->GetTree() == PENDING_TREE);
1234 layer_pairs->push_back(PictureLayerImpl::Pair(NULL, layer));
1235 }
1236 }
1237 }
1238
1239 scoped_ptr<RasterTilePriorityQueue> LayerTreeHostImpl::BuildRasterQueue(
1240 TreePriority tree_priority,
1241 RasterTilePriorityQueue::Type type) {
1242 TRACE_EVENT0("cc", "LayerTreeHostImpl::BuildRasterQueue");
1243 picture_layer_pairs_.clear();
1244 GetPictureLayerImplPairs(&picture_layer_pairs_, true);
1245 return RasterTilePriorityQueue::Create(picture_layer_pairs_, tree_priority,
1246 type);
1247 }
1248
1249 scoped_ptr<EvictionTilePriorityQueue> LayerTreeHostImpl::BuildEvictionQueue(
1250 TreePriority tree_priority) {
1251 TRACE_EVENT0("cc", "LayerTreeHostImpl::BuildEvictionQueue");
1252 scoped_ptr<EvictionTilePriorityQueue> queue(new EvictionTilePriorityQueue);
1253 picture_layer_pairs_.clear();
1254 GetPictureLayerImplPairs(&picture_layer_pairs_, false);
1255 queue->Build(picture_layer_pairs_, tree_priority);
1256 return queue;
1257 } 1207 }
1258 1208
1259 void LayerTreeHostImpl::SetIsLikelyToRequireADraw( 1209 void LayerTreeHostImpl::SetIsLikelyToRequireADraw(
1260 bool is_likely_to_require_a_draw) { 1210 bool is_likely_to_require_a_draw) {
1261 // Proactively tell the scheduler that we expect to draw within each vsync 1211 // Proactively tell the scheduler that we expect to draw within each vsync
1262 // until we get all the tiles ready to draw. If we happen to miss a required 1212 // until we get all the tiles ready to draw. If we happen to miss a required
1263 // for draw tile here, then we will miss telling the scheduler each frame that 1213 // for draw tile here, then we will miss telling the scheduler each frame that
1264 // we intend to draw so it may make worse scheduling decisions. 1214 // we intend to draw so it may make worse scheduling decisions.
1265 is_likely_to_require_a_draw_ = is_likely_to_require_a_draw; 1215 is_likely_to_require_a_draw_ = is_likely_to_require_a_draw;
1266 } 1216 }
1267 1217
1268 const std::vector<PictureLayerImpl*>& LayerTreeHostImpl::GetPictureLayers()
1269 const {
1270 return picture_layers_;
1271 }
1272
1273 void LayerTreeHostImpl::NotifyReadyToActivate() { 1218 void LayerTreeHostImpl::NotifyReadyToActivate() {
1274 client_->NotifyReadyToActivate(); 1219 client_->NotifyReadyToActivate();
1275 } 1220 }
1276 1221
1277 void LayerTreeHostImpl::NotifyReadyToDraw() { 1222 void LayerTreeHostImpl::NotifyReadyToDraw() {
1278 // Tiles that are ready will cause NotifyTileStateChanged() to be called so we 1223 // Tiles that are ready will cause NotifyTileStateChanged() to be called so we
1279 // don't need to schedule a draw here. Just stop WillBeginImplFrame() from 1224 // don't need to schedule a draw here. Just stop WillBeginImplFrame() from
1280 // causing optimistic requests to draw a frame. 1225 // causing optimistic requests to draw a frame.
1281 is_likely_to_require_a_draw_ = false; 1226 is_likely_to_require_a_draw_ = false;
1282 1227
(...skipping 539 matching lines...) Expand 10 before | Expand all | Expand 10 after
1822 1767
1823 UpdateViewportContainerSizes(); 1768 UpdateViewportContainerSizes();
1824 } else { 1769 } else {
1825 active_tree_->ProcessUIResourceRequestQueue(); 1770 active_tree_->ProcessUIResourceRequestQueue();
1826 } 1771 }
1827 1772
1828 active_tree_->DidBecomeActive(); 1773 active_tree_->DidBecomeActive();
1829 ActivateAnimations(); 1774 ActivateAnimations();
1830 if (settings_.impl_side_painting) { 1775 if (settings_.impl_side_painting) {
1831 client_->RenewTreePriority(); 1776 client_->RenewTreePriority();
1832 // If we have any picture layers, then by activating we also modified tile 1777 // If tile manager has tiling sets (ie, it tree priority changes would
1833 // priorities. 1778 // potentially affect some tiles), then make sure to schedule PrepareTiles
1834 if (!picture_layers_.empty()) 1779 // via DidModifyTilePriorities.
1780 if (tile_manager()->HasPictureLayerTilingSets())
1835 DidModifyTilePriorities(); 1781 DidModifyTilePriorities();
1836 } 1782 }
1837 1783
1838 client_->OnCanDrawStateChanged(CanDraw()); 1784 client_->OnCanDrawStateChanged(CanDraw());
1839 client_->DidActivateSyncTree(); 1785 client_->DidActivateSyncTree();
1840 if (!tree_activation_callback_.is_null()) 1786 if (!tree_activation_callback_.is_null())
1841 tree_activation_callback_.Run(); 1787 tree_activation_callback_.Run();
1842 1788
1843 if (debug_state_.continuous_painting) { 1789 if (debug_state_.continuous_painting) {
1844 const RenderingStats& stats = 1790 const RenderingStats& stats =
(...skipping 1657 matching lines...) Expand 10 before | Expand all | Expand 10 after
3502 for (; it != swap_promise_monitor_.end(); it++) 3448 for (; it != swap_promise_monitor_.end(); it++)
3503 (*it)->OnSetNeedsRedrawOnImpl(); 3449 (*it)->OnSetNeedsRedrawOnImpl();
3504 } 3450 }
3505 3451
3506 void LayerTreeHostImpl::NotifySwapPromiseMonitorsOfForwardingToMainThread() { 3452 void LayerTreeHostImpl::NotifySwapPromiseMonitorsOfForwardingToMainThread() {
3507 std::set<SwapPromiseMonitor*>::iterator it = swap_promise_monitor_.begin(); 3453 std::set<SwapPromiseMonitor*>::iterator it = swap_promise_monitor_.begin();
3508 for (; it != swap_promise_monitor_.end(); it++) 3454 for (; it != swap_promise_monitor_.end(); it++)
3509 (*it)->OnForwardScrollUpdateToMainThreadOnImpl(); 3455 (*it)->OnForwardScrollUpdateToMainThreadOnImpl();
3510 } 3456 }
3511 3457
3512 void LayerTreeHostImpl::RegisterPictureLayerImpl(PictureLayerImpl* layer) {
3513 DCHECK(std::find(picture_layers_.begin(), picture_layers_.end(), layer) ==
3514 picture_layers_.end());
3515 picture_layers_.push_back(layer);
3516 }
3517
3518 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) {
3519 std::vector<PictureLayerImpl*>::iterator it =
3520 std::find(picture_layers_.begin(), picture_layers_.end(), layer);
3521 DCHECK(it != picture_layers_.end());
3522 picture_layers_.erase(it);
3523 }
3524
3525 } // namespace cc 3458 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698