| OLD | NEW |
| 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/resources/picture_layer_tiling_set.h" | 5 #include "cc/resources/picture_layer_tiling_set.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 namespace cc { | 9 namespace cc { |
| 10 | 10 |
| 11 namespace { | 11 namespace { |
| 12 | 12 |
| 13 class LargestToSmallestScaleFunctor { | 13 class LargestToSmallestScaleFunctor { |
| 14 public: | 14 public: |
| 15 bool operator() (PictureLayerTiling* left, PictureLayerTiling* right) { | 15 bool operator() (PictureLayerTiling* left, PictureLayerTiling* right) { |
| 16 return left->contents_scale() > right->contents_scale(); | 16 return left->contents_scale() > right->contents_scale(); |
| 17 } | 17 } |
| 18 }; | 18 }; |
| 19 | 19 |
| 20 } // namespace | 20 } // namespace |
| 21 | 21 |
| 22 // static |
| 23 scoped_ptr<PictureLayerTilingSet> PictureLayerTilingSet::Create( |
| 24 PictureLayerTilingClient* client) { |
| 25 return make_scoped_ptr(new PictureLayerTilingSet(client)); |
| 26 } |
| 27 |
| 22 PictureLayerTilingSet::PictureLayerTilingSet(PictureLayerTilingClient* client) | 28 PictureLayerTilingSet::PictureLayerTilingSet(PictureLayerTilingClient* client) |
| 23 : client_(client) { | 29 : client_(client) { |
| 24 } | 30 } |
| 25 | 31 |
| 26 PictureLayerTilingSet::~PictureLayerTilingSet() { | 32 PictureLayerTilingSet::~PictureLayerTilingSet() { |
| 27 } | 33 } |
| 28 | 34 |
| 29 void PictureLayerTilingSet::SetClient(PictureLayerTilingClient* client) { | 35 void PictureLayerTilingSet::SetClient(PictureLayerTilingClient* client) { |
| 30 client_ = client; | 36 client_ = client; |
| 31 for (size_t i = 0; i < tilings_.size(); ++i) | 37 for (size_t i = 0; i < tilings_.size(); ++i) |
| 32 tilings_[i]->SetClient(client_); | 38 tilings_[i]->SetClient(client_); |
| 33 } | 39 } |
| 34 | 40 |
| 35 void PictureLayerTilingSet::RemoveTilesInRegion(const Region& region) { | 41 void PictureLayerTilingSet::RemoveTilesInRegion(const Region& region) { |
| 36 for (size_t i = 0; i < tilings_.size(); ++i) | 42 for (size_t i = 0; i < tilings_.size(); ++i) |
| 37 tilings_[i]->RemoveTilesInRegion(region); | 43 tilings_[i]->RemoveTilesInRegion(region); |
| 38 } | 44 } |
| 39 | 45 |
| 40 bool PictureLayerTilingSet::SyncTilings(const PictureLayerTilingSet& other, | 46 bool PictureLayerTilingSet::SyncTilings(const PictureLayerTilingSet& other, |
| 41 const gfx::Size& new_layer_bounds, | 47 const gfx::Size& new_layer_bounds, |
| 42 const Region& layer_invalidation, | 48 const Region& layer_invalidation, |
| 43 float minimum_contents_scale) { | 49 float minimum_contents_scale, |
| 50 RasterSource* raster_source) { |
| 44 if (new_layer_bounds.IsEmpty()) { | 51 if (new_layer_bounds.IsEmpty()) { |
| 45 RemoveAllTilings(); | 52 RemoveAllTilings(); |
| 46 return false; | 53 return false; |
| 47 } | 54 } |
| 48 | 55 |
| 49 tilings_.reserve(other.tilings_.size()); | 56 tilings_.reserve(other.tilings_.size()); |
| 50 | 57 |
| 51 // Remove any tilings that aren't in |other| or don't meet the minimum. | 58 // Remove any tilings that aren't in |other| or don't meet the minimum. |
| 52 for (size_t i = 0; i < tilings_.size(); ++i) { | 59 for (size_t i = 0; i < tilings_.size(); ++i) { |
| 53 float scale = tilings_[i]->contents_scale(); | 60 float scale = tilings_[i]->contents_scale(); |
| 54 if (scale >= minimum_contents_scale && !!other.TilingAtScale(scale)) | 61 if (scale >= minimum_contents_scale && !!other.TilingAtScale(scale)) |
| 55 continue; | 62 continue; |
| 56 // Swap with the last element and remove it. | 63 // Swap with the last element and remove it. |
| 57 tilings_.swap(tilings_.begin() + i, tilings_.end() - 1); | 64 tilings_.swap(tilings_.begin() + i, tilings_.end() - 1); |
| 58 tilings_.pop_back(); | 65 tilings_.pop_back(); |
| 59 --i; | 66 --i; |
| 60 } | 67 } |
| 61 | 68 |
| 62 bool have_high_res_tiling = false; | 69 bool have_high_res_tiling = false; |
| 63 | 70 |
| 64 // Add any missing tilings from |other| that meet the minimum. | 71 // Add any missing tilings from |other| that meet the minimum. |
| 65 for (size_t i = 0; i < other.tilings_.size(); ++i) { | 72 for (size_t i = 0; i < other.tilings_.size(); ++i) { |
| 66 float contents_scale = other.tilings_[i]->contents_scale(); | 73 float contents_scale = other.tilings_[i]->contents_scale(); |
| 67 if (contents_scale < minimum_contents_scale) | 74 if (contents_scale < minimum_contents_scale) |
| 68 continue; | 75 continue; |
| 69 if (PictureLayerTiling* this_tiling = TilingAtScale(contents_scale)) { | 76 if (PictureLayerTiling* this_tiling = TilingAtScale(contents_scale)) { |
| 70 this_tiling->set_resolution(other.tilings_[i]->resolution()); | 77 this_tiling->set_resolution(other.tilings_[i]->resolution()); |
| 71 | 78 |
| 72 this_tiling->UpdateTilesToCurrentRasterSource(layer_invalidation, | 79 this_tiling->UpdateTilesToCurrentRasterSource( |
| 73 new_layer_bounds); | 80 raster_source, layer_invalidation, new_layer_bounds); |
| 74 this_tiling->CreateMissingTilesInLiveTilesRect(); | 81 this_tiling->CreateMissingTilesInLiveTilesRect(); |
| 75 if (this_tiling->resolution() == HIGH_RESOLUTION) | 82 if (this_tiling->resolution() == HIGH_RESOLUTION) |
| 76 have_high_res_tiling = true; | 83 have_high_res_tiling = true; |
| 77 | 84 |
| 78 DCHECK(this_tiling->tile_size() == | 85 DCHECK(this_tiling->tile_size() == |
| 79 client_->CalculateTileSize(this_tiling->tiling_size())) | 86 client_->CalculateTileSize(this_tiling->tiling_size())) |
| 80 << "tile_size: " << this_tiling->tile_size().ToString() | 87 << "tile_size: " << this_tiling->tile_size().ToString() |
| 81 << " tiling_size: " << this_tiling->tiling_size().ToString() | 88 << " tiling_size: " << this_tiling->tiling_size().ToString() |
| 82 << " CalculateTileSize: " | 89 << " CalculateTileSize: " |
| 83 << client_->CalculateTileSize(this_tiling->tiling_size()).ToString(); | 90 << client_->CalculateTileSize(this_tiling->tiling_size()).ToString(); |
| (...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 365 case LOWER_THAN_LOW_RES: | 372 case LOWER_THAN_LOW_RES: |
| 366 range = TilingRange(low_res_range.end, tilings_.size()); | 373 range = TilingRange(low_res_range.end, tilings_.size()); |
| 367 break; | 374 break; |
| 368 } | 375 } |
| 369 | 376 |
| 370 DCHECK_LE(range.start, range.end); | 377 DCHECK_LE(range.start, range.end); |
| 371 return range; | 378 return range; |
| 372 } | 379 } |
| 373 | 380 |
| 374 } // namespace cc | 381 } // namespace cc |
| OLD | NEW |