| 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/tile_manager.h" | 5 #include "cc/resources/tile_manager.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| (...skipping 552 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 563 &memory_allocated_bytes, | 563 &memory_allocated_bytes, |
| 564 &memory_used_bytes); | 564 &memory_used_bytes); |
| 565 requirements->SetInteger("memory_required_bytes", memory_required_bytes); | 565 requirements->SetInteger("memory_required_bytes", memory_required_bytes); |
| 566 requirements->SetInteger("memory_nice_to_have_bytes", | 566 requirements->SetInteger("memory_nice_to_have_bytes", |
| 567 memory_nice_to_have_bytes); | 567 memory_nice_to_have_bytes); |
| 568 requirements->SetInteger("memory_allocated_bytes", memory_allocated_bytes); | 568 requirements->SetInteger("memory_allocated_bytes", memory_allocated_bytes); |
| 569 requirements->SetInteger("memory_used_bytes", memory_used_bytes); | 569 requirements->SetInteger("memory_used_bytes", memory_used_bytes); |
| 570 return requirements.PassAs<base::Value>(); | 570 return requirements.PassAs<base::Value>(); |
| 571 } | 571 } |
| 572 | 572 |
| 573 RasterMode TileManager::DetermineRasterMode(const Tile* tile) const { | |
| 574 DCHECK(tile); | |
| 575 DCHECK(tile->picture_pile()); | |
| 576 | |
| 577 const ManagedTileState& mts = tile->managed_state(); | |
| 578 RasterMode current_mode = mts.raster_mode; | |
| 579 | |
| 580 RasterMode raster_mode = HIGH_QUALITY_RASTER_MODE; | |
| 581 if (tile->managed_state().resolution == LOW_RESOLUTION) | |
| 582 raster_mode = LOW_QUALITY_RASTER_MODE; | |
| 583 else if (tile->can_use_lcd_text()) | |
| 584 raster_mode = HIGH_QUALITY_RASTER_MODE; | |
| 585 else if (mts.tile_versions[current_mode].has_text_ || | |
| 586 !mts.tile_versions[current_mode].IsReadyToDraw()) | |
| 587 raster_mode = HIGH_QUALITY_NO_LCD_RASTER_MODE; | |
| 588 | |
| 589 return std::min(raster_mode, current_mode); | |
| 590 } | |
| 591 | |
| 592 void TileManager::AssignGpuMemoryToTiles( | 573 void TileManager::AssignGpuMemoryToTiles( |
| 593 PrioritizedTileSet* tiles, | 574 PrioritizedTileSet* tiles, |
| 594 TileVector* tiles_that_need_to_be_rasterized) { | 575 TileVector* tiles_that_need_to_be_rasterized) { |
| 595 TRACE_EVENT0("cc", "TileManager::AssignGpuMemoryToTiles"); | 576 TRACE_EVENT0("cc", "TileManager::AssignGpuMemoryToTiles"); |
| 596 | 577 |
| 597 // Maintain the list of released resources that can potentially be re-used | 578 // Maintain the list of released resources that can potentially be re-used |
| 598 // or deleted. | 579 // or deleted. |
| 599 // If this operation becomes expensive too, only do this after some | 580 // If this operation becomes expensive too, only do this after some |
| 600 // resource(s) was returned. Note that in that case, one also need to | 581 // resource(s) was returned. Note that in that case, one also need to |
| 601 // invalidate when releasing some resource from the pool. | 582 // invalidate when releasing some resource from the pool. |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 641 size_t max_raster_bytes = max_raster_usage_bytes_ / 2; | 622 size_t max_raster_bytes = max_raster_usage_bytes_ / 2; |
| 642 size_t raster_bytes = 0; | 623 size_t raster_bytes = 0; |
| 643 | 624 |
| 644 unsigned schedule_priority = 1u; | 625 unsigned schedule_priority = 1u; |
| 645 for (PrioritizedTileSet::Iterator it(tiles, true); it; ++it) { | 626 for (PrioritizedTileSet::Iterator it(tiles, true); it; ++it) { |
| 646 Tile* tile = *it; | 627 Tile* tile = *it; |
| 647 ManagedTileState& mts = tile->managed_state(); | 628 ManagedTileState& mts = tile->managed_state(); |
| 648 | 629 |
| 649 mts.scheduled_priority = schedule_priority++; | 630 mts.scheduled_priority = schedule_priority++; |
| 650 | 631 |
| 651 mts.raster_mode = DetermineRasterMode(tile); | 632 mts.raster_mode = tile->DetermineOverallRasterMode(); |
| 652 | 633 |
| 653 ManagedTileState::TileVersion& tile_version = | 634 ManagedTileState::TileVersion& tile_version = |
| 654 mts.tile_versions[mts.raster_mode]; | 635 mts.tile_versions[mts.raster_mode]; |
| 655 | 636 |
| 656 // If this tile doesn't need a resource, then nothing to do. | 637 // If this tile doesn't need a resource, then nothing to do. |
| 657 if (!tile_version.requires_resource()) | 638 if (!tile_version.requires_resource()) |
| 658 continue; | 639 continue; |
| 659 | 640 |
| 660 // If the tile is not needed, free it up. | 641 // If the tile is not needed, free it up. |
| 661 if (mts.bin == NEVER_BIN) { | 642 if (mts.bin == NEVER_BIN) { |
| (...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 998 flags)); | 979 flags)); |
| 999 DCHECK(tiles_.find(tile->id()) == tiles_.end()); | 980 DCHECK(tiles_.find(tile->id()) == tiles_.end()); |
| 1000 | 981 |
| 1001 tiles_[tile->id()] = tile; | 982 tiles_[tile->id()] = tile; |
| 1002 used_layer_counts_[tile->layer_id()]++; | 983 used_layer_counts_[tile->layer_id()]++; |
| 1003 prioritized_tiles_dirty_ = true; | 984 prioritized_tiles_dirty_ = true; |
| 1004 return tile; | 985 return tile; |
| 1005 } | 986 } |
| 1006 | 987 |
| 1007 } // namespace cc | 988 } // namespace cc |
| OLD | NEW |