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

Side by Side Diff: cc/layers/picture_layer_impl.cc

Issue 1024633002: cc: Keep tilings texture size in sync (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix broken test Created 5 years, 9 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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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/layers/picture_layer_impl.h" 5 #include "cc/layers/picture_layer_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 #include <limits> 9 #include <limits>
10 #include <set> 10 #include <set>
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 layer_impl->twin_layer_ = this; 123 layer_impl->twin_layer_ = this;
124 124
125 layer_impl->SetNearestNeighbor(nearest_neighbor_); 125 layer_impl->SetNearestNeighbor(nearest_neighbor_);
126 126
127 // Solid color layers have no tilings. 127 // Solid color layers have no tilings.
128 DCHECK_IMPLIES(raster_source_->IsSolidColor(), tilings_->num_tilings() == 0); 128 DCHECK_IMPLIES(raster_source_->IsSolidColor(), tilings_->num_tilings() == 0);
129 // The pending tree should only have a high res (and possibly low res) tiling. 129 // The pending tree should only have a high res (and possibly low res) tiling.
130 DCHECK_LE(tilings_->num_tilings(), 130 DCHECK_LE(tilings_->num_tilings(),
131 layer_tree_impl()->create_low_res_tiling() ? 2u : 1u); 131 layer_tree_impl()->create_low_res_tiling() ? 2u : 1u);
132 132
133 layer_impl->UpdateRasterSource(raster_source_, &invalidation_, 133 layer_impl->UpdateRasterSource(raster_source_, &invalidation_, tilings_.get(),
134 tilings_.get()); 134 gpu_raster_max_texture_size_);
135 DCHECK(invalidation_.IsEmpty()); 135 DCHECK(invalidation_.IsEmpty());
136 136
137 // After syncing a solid color layer, the active layer has no tilings. 137 // After syncing a solid color layer, the active layer has no tilings.
138 DCHECK_IMPLIES(raster_source_->IsSolidColor(), 138 DCHECK_IMPLIES(raster_source_->IsSolidColor(),
139 layer_impl->tilings_->num_tilings() == 0); 139 layer_impl->tilings_->num_tilings() == 0);
140 140
141 layer_impl->raster_page_scale_ = raster_page_scale_; 141 layer_impl->raster_page_scale_ = raster_page_scale_;
142 layer_impl->raster_device_scale_ = raster_device_scale_; 142 layer_impl->raster_device_scale_ = raster_device_scale_;
143 layer_impl->raster_source_scale_ = raster_source_scale_; 143 layer_impl->raster_source_scale_ = raster_source_scale_;
144 layer_impl->raster_contents_scale_ = raster_contents_scale_; 144 layer_impl->raster_contents_scale_ = raster_contents_scale_;
(...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after
496 496
497 PictureLayerImpl* PictureLayerImpl::GetRecycledTwinLayer() const { 497 PictureLayerImpl* PictureLayerImpl::GetRecycledTwinLayer() const {
498 if (!twin_layer_ || twin_layer_->IsOnActiveOrPendingTree()) 498 if (!twin_layer_ || twin_layer_->IsOnActiveOrPendingTree())
499 return nullptr; 499 return nullptr;
500 return twin_layer_; 500 return twin_layer_;
501 } 501 }
502 502
503 void PictureLayerImpl::UpdateRasterSource( 503 void PictureLayerImpl::UpdateRasterSource(
504 scoped_refptr<RasterSource> raster_source, 504 scoped_refptr<RasterSource> raster_source,
505 Region* new_invalidation, 505 Region* new_invalidation,
506 const PictureLayerTilingSet* pending_set) { 506 const PictureLayerTilingSet* pending_set,
507 gfx::Size gpu_raster_max_texture_size) {
508 gpu_raster_max_texture_size_ = gpu_raster_max_texture_size;
vmpstr 2015/03/19 23:14:39 It kind of feels like this can be a separate funct
509
507 // The bounds and the pile size may differ if the pile wasn't updated (ie. 510 // The bounds and the pile size may differ if the pile wasn't updated (ie.
508 // PictureLayer::Update didn't happen). In that case the pile will be empty. 511 // PictureLayer::Update didn't happen). In that case the pile will be empty.
509 DCHECK_IMPLIES(!raster_source->GetSize().IsEmpty(), 512 DCHECK_IMPLIES(!raster_source->GetSize().IsEmpty(),
510 bounds() == raster_source->GetSize()) 513 bounds() == raster_source->GetSize())
511 << " bounds " << bounds().ToString() << " pile " 514 << " bounds " << bounds().ToString() << " pile "
512 << raster_source->GetSize().ToString(); 515 << raster_source->GetSize().ToString();
513 516
514 // The |raster_source_| is initially null, so have to check for that for the 517 // The |raster_source_| is initially null, so have to check for that for the
515 // first frame. 518 // first frame.
516 bool could_have_tilings = raster_source_.get() && CanHaveTilings(); 519 bool could_have_tilings = raster_source_.get() && CanHaveTilings();
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
555 if (can_use_lcd_text() == RasterSourceUsesLCDText()) 558 if (can_use_lcd_text() == RasterSourceUsesLCDText())
556 return; 559 return;
557 560
558 // Raster sources are considered const, so in order to update the state 561 // Raster sources are considered const, so in order to update the state
559 // a new one must be created and all tiles recreated. 562 // a new one must be created and all tiles recreated.
560 scoped_refptr<RasterSource> new_raster_source = 563 scoped_refptr<RasterSource> new_raster_source =
561 raster_source_->CreateCloneWithoutLCDText(); 564 raster_source_->CreateCloneWithoutLCDText();
562 // Synthetically invalidate everything. 565 // Synthetically invalidate everything.
563 gfx::Rect bounds_rect(bounds()); 566 gfx::Rect bounds_rect(bounds());
564 Region invalidation(bounds_rect); 567 Region invalidation(bounds_rect);
565 UpdateRasterSource(new_raster_source, &invalidation, nullptr); 568 UpdateRasterSource(new_raster_source, &invalidation, nullptr,
569 gpu_raster_max_texture_size_);
566 SetUpdateRect(bounds_rect); 570 SetUpdateRect(bounds_rect);
567 571
568 DCHECK(!RasterSourceUsesLCDText()); 572 DCHECK(!RasterSourceUsesLCDText());
569 } 573 }
570 574
571 bool PictureLayerImpl::RasterSourceUsesLCDText() const { 575 bool PictureLayerImpl::RasterSourceUsesLCDText() const {
572 return raster_source_ ? raster_source_->CanUseLCDText() 576 return raster_source_ ? raster_source_->CanUseLCDText()
573 : layer_tree_impl()->settings().can_use_lcd_text; 577 : layer_tree_impl()->settings().can_use_lcd_text;
574 } 578 }
575 579
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
678 DCHECK_LE(content_bounds.height(), max_texture_size); 682 DCHECK_LE(content_bounds.height(), max_texture_size);
679 return content_bounds; 683 return content_bounds;
680 } 684 }
681 685
682 int default_tile_width = 0; 686 int default_tile_width = 0;
683 int default_tile_height = 0; 687 int default_tile_height = 0;
684 if (layer_tree_impl()->use_gpu_rasterization()) { 688 if (layer_tree_impl()->use_gpu_rasterization()) {
685 // For GPU rasterization, we pick an ideal tile size using the viewport 689 // For GPU rasterization, we pick an ideal tile size using the viewport
686 // so we don't need any settings. The current approach uses 4 tiles 690 // so we don't need any settings. The current approach uses 4 tiles
687 // to cover the viewport vertically. 691 // to cover the viewport vertically.
688 int viewport_width = layer_tree_impl()->device_viewport_size().width(); 692 int viewport_width = gpu_raster_max_texture_size_.width();
689 int viewport_height = layer_tree_impl()->device_viewport_size().height(); 693 int viewport_height = gpu_raster_max_texture_size_.height();
690 default_tile_width = viewport_width; 694 default_tile_width = viewport_width;
691 // Also, increase the height proportionally as the width decreases, and 695 // Also, increase the height proportionally as the width decreases, and
692 // pad by our border texels to make the tiles exactly match the viewport. 696 // pad by our border texels to make the tiles exactly match the viewport.
693 int divisor = 4; 697 int divisor = 4;
694 if (content_bounds.width() <= viewport_width / 2) 698 if (content_bounds.width() <= viewport_width / 2)
695 divisor = 2; 699 divisor = 2;
696 if (content_bounds.width() <= viewport_width / 4) 700 if (content_bounds.width() <= viewport_width / 4)
697 divisor = 1; 701 divisor = 1;
698 default_tile_height = RoundUp(viewport_height, divisor) / divisor; 702 default_tile_height = RoundUp(viewport_height, divisor) / divisor;
699 default_tile_height += 2 * PictureLayerTiling::kBorderTexels; 703 default_tile_height += 2 * PictureLayerTiling::kBorderTexels;
(...skipping 528 matching lines...) Expand 10 before | Expand all | Expand 10 after
1228 1232
1229 bool PictureLayerImpl::IsOnActiveOrPendingTree() const { 1233 bool PictureLayerImpl::IsOnActiveOrPendingTree() const {
1230 return !layer_tree_impl()->IsRecycleTree(); 1234 return !layer_tree_impl()->IsRecycleTree();
1231 } 1235 }
1232 1236
1233 bool PictureLayerImpl::HasValidTilePriorities() const { 1237 bool PictureLayerImpl::HasValidTilePriorities() const {
1234 return IsOnActiveOrPendingTree() && IsDrawnRenderSurfaceLayerListMember(); 1238 return IsOnActiveOrPendingTree() && IsDrawnRenderSurfaceLayerListMember();
1235 } 1239 }
1236 1240
1237 } // namespace cc 1241 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698