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

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

Issue 324483003: cc: Removed LCD text settings from the impl side. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « cc/layers/picture_layer_impl.h ('k') | cc/layers/picture_layer_impl_unittest.cc » ('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 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 <limits> 8 #include <limits>
9 9
10 #include "base/time/time.h" 10 #include "base/time/time.h"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 ideal_device_scale_(0.f), 55 ideal_device_scale_(0.f),
56 ideal_source_scale_(0.f), 56 ideal_source_scale_(0.f),
57 ideal_contents_scale_(0.f), 57 ideal_contents_scale_(0.f),
58 raster_page_scale_(0.f), 58 raster_page_scale_(0.f),
59 raster_device_scale_(0.f), 59 raster_device_scale_(0.f),
60 raster_source_scale_(0.f), 60 raster_source_scale_(0.f),
61 raster_contents_scale_(0.f), 61 raster_contents_scale_(0.f),
62 low_res_raster_contents_scale_(0.f), 62 low_res_raster_contents_scale_(0.f),
63 raster_source_scale_is_fixed_(false), 63 raster_source_scale_is_fixed_(false),
64 was_animating_transform_to_screen_(false), 64 was_animating_transform_to_screen_(false),
65 is_using_lcd_text_(tree_impl->settings().can_use_lcd_text),
66 needs_post_commit_initialization_(true), 65 needs_post_commit_initialization_(true),
67 should_update_tile_priorities_(false) { 66 should_update_tile_priorities_(false) {
68 layer_tree_impl()->RegisterPictureLayerImpl(this); 67 layer_tree_impl()->RegisterPictureLayerImpl(this);
69 } 68 }
70 69
71 PictureLayerImpl::~PictureLayerImpl() { 70 PictureLayerImpl::~PictureLayerImpl() {
72 layer_tree_impl()->UnregisterPictureLayerImpl(this); 71 layer_tree_impl()->UnregisterPictureLayerImpl(this);
73 } 72 }
74 73
75 const char* PictureLayerImpl::LayerTypeAsString() const { 74 const char* PictureLayerImpl::LayerTypeAsString() const {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 114
116 layer_impl->tilings_->SetClient(layer_impl); 115 layer_impl->tilings_->SetClient(layer_impl);
117 if (tilings_) 116 if (tilings_)
118 tilings_->SetClient(this); 117 tilings_->SetClient(this);
119 118
120 layer_impl->raster_page_scale_ = raster_page_scale_; 119 layer_impl->raster_page_scale_ = raster_page_scale_;
121 layer_impl->raster_device_scale_ = raster_device_scale_; 120 layer_impl->raster_device_scale_ = raster_device_scale_;
122 layer_impl->raster_source_scale_ = raster_source_scale_; 121 layer_impl->raster_source_scale_ = raster_source_scale_;
123 layer_impl->raster_contents_scale_ = raster_contents_scale_; 122 layer_impl->raster_contents_scale_ = raster_contents_scale_;
124 layer_impl->low_res_raster_contents_scale_ = low_res_raster_contents_scale_; 123 layer_impl->low_res_raster_contents_scale_ = low_res_raster_contents_scale_;
125
126 layer_impl->UpdateLCDTextStatus(is_using_lcd_text_);
127 layer_impl->needs_post_commit_initialization_ = false; 124 layer_impl->needs_post_commit_initialization_ = false;
128 125
129 // The invalidation on this soon-to-be-recycled layer must be cleared to 126 // The invalidation on this soon-to-be-recycled layer must be cleared to
130 // mirror clearing the invalidation in PictureLayer's version of this function 127 // mirror clearing the invalidation in PictureLayer's version of this function
131 // in case push properties is skipped. 128 // in case push properties is skipped.
132 layer_impl->invalidation_.Swap(&invalidation_); 129 layer_impl->invalidation_.Swap(&invalidation_);
133 invalidation_.Clear(); 130 invalidation_.Clear();
134 needs_post_commit_initialization_ = true; 131 needs_post_commit_initialization_ = true;
135 132
136 // We always need to push properties. 133 // We always need to push properties.
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 for (size_t i = 0; i < tilings_->num_tilings(); ++i) { 392 for (size_t i = 0; i < tilings_->num_tilings(); ++i) {
396 if (tilings_->tiling_at(i)->NeedsUpdateForFrameAtTime( 393 if (tilings_->tiling_at(i)->NeedsUpdateForFrameAtTime(
397 current_frame_time_in_seconds)) { 394 current_frame_time_in_seconds)) {
398 tiling_needs_update = true; 395 tiling_needs_update = true;
399 break; 396 break;
400 } 397 }
401 } 398 }
402 if (!tiling_needs_update) 399 if (!tiling_needs_update)
403 return; 400 return;
404 401
405 UpdateLCDTextStatus(can_use_lcd_text());
406
407 // Use visible_content_rect, unless it's empty. If it's empty, then 402 // Use visible_content_rect, unless it's empty. If it's empty, then
408 // try to inverse project the viewport into layer space and use that. 403 // try to inverse project the viewport into layer space and use that.
409 gfx::Rect visible_rect_in_content_space = visible_rect_for_tile_priority_; 404 gfx::Rect visible_rect_in_content_space = visible_rect_for_tile_priority_;
410 if (visible_rect_in_content_space.IsEmpty()) { 405 if (visible_rect_in_content_space.IsEmpty()) {
411 gfx::Transform screen_to_layer(gfx::Transform::kSkipInitialization); 406 gfx::Transform screen_to_layer(gfx::Transform::kSkipInitialization);
412 if (screen_space_transform_for_tile_priority_.GetInverse( 407 if (screen_space_transform_for_tile_priority_.GetInverse(
413 &screen_to_layer)) { 408 &screen_to_layer)) {
414 visible_rect_in_content_space = 409 visible_rect_in_content_space =
415 gfx::ToEnclosingRect(MathUtil::ProjectClippedRect( 410 gfx::ToEnclosingRect(MathUtil::ProjectClippedRect(
416 screen_to_layer, gfx::Rect(viewport_size_for_tile_priority_))); 411 screen_to_layer, gfx::Rect(viewport_size_for_tile_priority_)));
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
534 skia::RefPtr<SkPicture> PictureLayerImpl::GetPicture() { 529 skia::RefPtr<SkPicture> PictureLayerImpl::GetPicture() {
535 return pile_->GetFlattenedPicture(); 530 return pile_->GetFlattenedPicture();
536 } 531 }
537 532
538 scoped_refptr<Tile> PictureLayerImpl::CreateTile(PictureLayerTiling* tiling, 533 scoped_refptr<Tile> PictureLayerImpl::CreateTile(PictureLayerTiling* tiling,
539 const gfx::Rect& content_rect) { 534 const gfx::Rect& content_rect) {
540 if (!pile_->CanRaster(tiling->contents_scale(), content_rect)) 535 if (!pile_->CanRaster(tiling->contents_scale(), content_rect))
541 return scoped_refptr<Tile>(); 536 return scoped_refptr<Tile>();
542 537
543 int flags = 0; 538 int flags = 0;
544 if (is_using_lcd_text_)
545 flags |= Tile::USE_LCD_TEXT;
546
547 // We analyze picture before rasterization to detect solid-color tiles. 539 // We analyze picture before rasterization to detect solid-color tiles.
548 // If the tile is detected as such there is no need to raster or upload. 540 // If the tile is detected as such there is no need to raster or upload.
549 // It is drawn directly as a solid-color quad saving memory, raster and upload 541 // It is drawn directly as a solid-color quad saving memory, raster and upload
550 // cost. The analysis step is however expensive and may not be justified when 542 // cost. The analysis step is however expensive and may not be justified when
551 // doing gpu rasterization which runs on the compositor thread and where there 543 // doing gpu rasterization which runs on the compositor thread and where there
552 // is no upload. 544 // is no upload.
553 // TODO(alokp): Revisit the decision to avoid analysis for gpu rasterization 545 // TODO(alokp): Revisit the decision to avoid analysis for gpu rasterization
554 // becuase it too can potentially benefit from memory savings. 546 // becuase it too can potentially benefit from memory savings.
555 if (!layer_tree_impl()->use_gpu_rasterization()) { 547 if (!layer_tree_impl()->use_gpu_rasterization()) {
556 // Additionally, we do not want to do the analysis if the layer is too 548 // Additionally, we do not want to do the analysis if the layer is too
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
671 return gfx::Size(width, height); 663 return gfx::Size(width, height);
672 } 664 }
673 665
674 return default_tile_size; 666 return default_tile_size;
675 } 667 }
676 668
677 void PictureLayerImpl::SyncFromActiveLayer(const PictureLayerImpl* other) { 669 void PictureLayerImpl::SyncFromActiveLayer(const PictureLayerImpl* other) {
678 DCHECK(!other->needs_post_commit_initialization_); 670 DCHECK(!other->needs_post_commit_initialization_);
679 DCHECK(other->tilings_); 671 DCHECK(other->tilings_);
680 672
681 UpdateLCDTextStatus(other->is_using_lcd_text_);
682
683 if (!DrawsContent()) { 673 if (!DrawsContent()) {
684 RemoveAllTilings(); 674 RemoveAllTilings();
685 return; 675 return;
686 } 676 }
687 677
688 raster_page_scale_ = other->raster_page_scale_; 678 raster_page_scale_ = other->raster_page_scale_;
689 raster_device_scale_ = other->raster_device_scale_; 679 raster_device_scale_ = other->raster_device_scale_;
690 raster_source_scale_ = other->raster_source_scale_; 680 raster_source_scale_ = other->raster_source_scale_;
691 raster_contents_scale_ = other->raster_contents_scale_; 681 raster_contents_scale_ = other->raster_contents_scale_;
692 low_res_raster_contents_scale_ = other->low_res_raster_contents_scale_; 682 low_res_raster_contents_scale_ = other->low_res_raster_contents_scale_;
(...skipping 585 matching lines...) Expand 10 before | Expand all | Expand 10 after
1278 // then it will end up having less than one pixel of content in that 1268 // then it will end up having less than one pixel of content in that
1279 // dimension. Bump the minimum contents scale up in this case to prevent 1269 // dimension. Bump the minimum contents scale up in this case to prevent
1280 // this from happening. 1270 // this from happening.
1281 int min_dimension = std::min(bounds().width(), bounds().height()); 1271 int min_dimension = std::min(bounds().width(), bounds().height());
1282 if (!min_dimension) 1272 if (!min_dimension)
1283 return setting_min; 1273 return setting_min;
1284 1274
1285 return std::max(1.f / min_dimension, setting_min); 1275 return std::max(1.f / min_dimension, setting_min);
1286 } 1276 }
1287 1277
1288 void PictureLayerImpl::UpdateLCDTextStatus(bool new_status) {
1289 // Once this layer is not using lcd text, don't switch back.
1290 if (!is_using_lcd_text_)
1291 return;
1292
1293 if (is_using_lcd_text_ == new_status)
1294 return;
1295
1296 is_using_lcd_text_ = new_status;
1297 tilings_->SetCanUseLCDText(is_using_lcd_text_);
1298 }
1299
1300 void PictureLayerImpl::ResetRasterScale() { 1278 void PictureLayerImpl::ResetRasterScale() {
1301 raster_page_scale_ = 0.f; 1279 raster_page_scale_ = 0.f;
1302 raster_device_scale_ = 0.f; 1280 raster_device_scale_ = 0.f;
1303 raster_source_scale_ = 0.f; 1281 raster_source_scale_ = 0.f;
1304 raster_contents_scale_ = 0.f; 1282 raster_contents_scale_ = 0.f;
1305 low_res_raster_contents_scale_ = 0.f; 1283 low_res_raster_contents_scale_ = 0.f;
1306 raster_source_scale_is_fixed_ = false; 1284 raster_source_scale_is_fixed_ = false;
1307 1285
1308 // When raster scales aren't valid, don't update tile priorities until 1286 // When raster scales aren't valid, don't update tile priorities until
1309 // this layer has been updated via UpdateDrawProperties. 1287 // this layer has been updated via UpdateDrawProperties.
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1366 ++iter) { 1344 ++iter) {
1367 scoped_ptr<base::DictionaryValue> tile_data(new base::DictionaryValue); 1345 scoped_ptr<base::DictionaryValue> tile_data(new base::DictionaryValue);
1368 tile_data->Set("geometry_rect", 1346 tile_data->Set("geometry_rect",
1369 MathUtil::AsValue(iter.geometry_rect()).release()); 1347 MathUtil::AsValue(iter.geometry_rect()).release());
1370 if (*iter) 1348 if (*iter)
1371 tile_data->Set("tile", TracedValue::CreateIDRef(*iter).release()); 1349 tile_data->Set("tile", TracedValue::CreateIDRef(*iter).release());
1372 1350
1373 coverage_tiles->Append(tile_data.release()); 1351 coverage_tiles->Append(tile_data.release());
1374 } 1352 }
1375 state->Set("coverage_tiles", coverage_tiles.release()); 1353 state->Set("coverage_tiles", coverage_tiles.release());
1376 state->SetBoolean("is_using_lcd_text", is_using_lcd_text_);
1377 } 1354 }
1378 1355
1379 size_t PictureLayerImpl::GPUMemoryUsageInBytes() const { 1356 size_t PictureLayerImpl::GPUMemoryUsageInBytes() const {
1380 const_cast<PictureLayerImpl*>(this)->DoPostCommitInitializationIfNeeded(); 1357 const_cast<PictureLayerImpl*>(this)->DoPostCommitInitializationIfNeeded();
1381 return tilings_->GPUMemoryUsageInBytes(); 1358 return tilings_->GPUMemoryUsageInBytes();
1382 } 1359 }
1383 1360
1384 void PictureLayerImpl::RunMicroBenchmark(MicroBenchmarkImpl* benchmark) { 1361 void PictureLayerImpl::RunMicroBenchmark(MicroBenchmarkImpl* benchmark) {
1385 benchmark->RunOnLayer(this); 1362 benchmark->RunOnLayer(this);
1386 } 1363 }
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
1650 return iterator_index_ < iterators_.size(); 1627 return iterator_index_ < iterators_.size();
1651 } 1628 }
1652 1629
1653 bool PictureLayerImpl::LayerEvictionTileIterator::IsCorrectType( 1630 bool PictureLayerImpl::LayerEvictionTileIterator::IsCorrectType(
1654 PictureLayerTiling::TilingEvictionTileIterator* it) const { 1631 PictureLayerTiling::TilingEvictionTileIterator* it) const {
1655 return it->get_type() == iteration_stage_ && 1632 return it->get_type() == iteration_stage_ &&
1656 (**it)->required_for_activation() == required_for_activation_; 1633 (**it)->required_for_activation() == required_for_activation_;
1657 } 1634 }
1658 1635
1659 } // namespace cc 1636 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/picture_layer_impl.h ('k') | cc/layers/picture_layer_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698