| 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 559 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 570 &memory_allocated_bytes, | 570 &memory_allocated_bytes, |
| 571 &memory_used_bytes); | 571 &memory_used_bytes); |
| 572 requirements->SetInteger("memory_required_bytes", memory_required_bytes); | 572 requirements->SetInteger("memory_required_bytes", memory_required_bytes); |
| 573 requirements->SetInteger("memory_nice_to_have_bytes", | 573 requirements->SetInteger("memory_nice_to_have_bytes", |
| 574 memory_nice_to_have_bytes); | 574 memory_nice_to_have_bytes); |
| 575 requirements->SetInteger("memory_allocated_bytes", memory_allocated_bytes); | 575 requirements->SetInteger("memory_allocated_bytes", memory_allocated_bytes); |
| 576 requirements->SetInteger("memory_used_bytes", memory_used_bytes); | 576 requirements->SetInteger("memory_used_bytes", memory_used_bytes); |
| 577 return requirements.PassAs<base::Value>(); | 577 return requirements.PassAs<base::Value>(); |
| 578 } | 578 } |
| 579 | 579 |
| 580 RasterMode TileManager::DetermineRasterMode(const Tile* tile) const { | |
| 581 DCHECK(tile); | |
| 582 DCHECK(tile->picture_pile()); | |
| 583 | |
| 584 const ManagedTileState& mts = tile->managed_state(); | |
| 585 RasterMode current_mode = mts.raster_mode; | |
| 586 | |
| 587 RasterMode raster_mode = HIGH_QUALITY_RASTER_MODE; | |
| 588 if (tile->managed_state().resolution == LOW_RESOLUTION) | |
| 589 raster_mode = LOW_QUALITY_RASTER_MODE; | |
| 590 else if (tile->can_use_lcd_text()) | |
| 591 raster_mode = HIGH_QUALITY_RASTER_MODE; | |
| 592 else if (mts.tile_versions[current_mode].has_text_ || | |
| 593 !mts.tile_versions[current_mode].IsReadyToDraw()) | |
| 594 raster_mode = HIGH_QUALITY_NO_LCD_RASTER_MODE; | |
| 595 | |
| 596 return std::min(raster_mode, current_mode); | |
| 597 } | |
| 598 | |
| 599 void TileManager::AssignGpuMemoryToTiles( | 580 void TileManager::AssignGpuMemoryToTiles( |
| 600 PrioritizedTileSet* tiles, | 581 PrioritizedTileSet* tiles, |
| 601 TileVector* tiles_that_need_to_be_rasterized) { | 582 TileVector* tiles_that_need_to_be_rasterized) { |
| 602 TRACE_EVENT0("cc", "TileManager::AssignGpuMemoryToTiles"); | 583 TRACE_EVENT0("cc", "TileManager::AssignGpuMemoryToTiles"); |
| 603 | 584 |
| 604 // Maintain the list of released resources that can potentially be re-used | 585 // Maintain the list of released resources that can potentially be re-used |
| 605 // or deleted. | 586 // or deleted. |
| 606 // If this operation becomes expensive too, only do this after some | 587 // If this operation becomes expensive too, only do this after some |
| 607 // resource(s) was returned. Note that in that case, one also need to | 588 // resource(s) was returned. Note that in that case, one also need to |
| 608 // invalidate when releasing some resource from the pool. | 589 // invalidate when releasing some resource from the pool. |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 648 size_t max_raster_bytes = max_raster_usage_bytes_ / 2; | 629 size_t max_raster_bytes = max_raster_usage_bytes_ / 2; |
| 649 size_t raster_bytes = 0; | 630 size_t raster_bytes = 0; |
| 650 | 631 |
| 651 unsigned schedule_priority = 1u; | 632 unsigned schedule_priority = 1u; |
| 652 for (PrioritizedTileSet::Iterator it(tiles, true); it; ++it) { | 633 for (PrioritizedTileSet::Iterator it(tiles, true); it; ++it) { |
| 653 Tile* tile = *it; | 634 Tile* tile = *it; |
| 654 ManagedTileState& mts = tile->managed_state(); | 635 ManagedTileState& mts = tile->managed_state(); |
| 655 | 636 |
| 656 mts.scheduled_priority = schedule_priority++; | 637 mts.scheduled_priority = schedule_priority++; |
| 657 | 638 |
| 658 mts.raster_mode = DetermineRasterMode(tile); | 639 mts.raster_mode = tile->DetermineOverallRasterMode(); |
| 659 | 640 |
| 660 ManagedTileState::TileVersion& tile_version = | 641 ManagedTileState::TileVersion& tile_version = |
| 661 mts.tile_versions[mts.raster_mode]; | 642 mts.tile_versions[mts.raster_mode]; |
| 662 | 643 |
| 663 // If this tile doesn't need a resource, then nothing to do. | 644 // If this tile doesn't need a resource, then nothing to do. |
| 664 if (!tile_version.requires_resource()) | 645 if (!tile_version.requires_resource()) |
| 665 continue; | 646 continue; |
| 666 | 647 |
| 667 // If the tile is not needed, free it up. | 648 // If the tile is not needed, free it up. |
| 668 if (mts.bin == NEVER_BIN) { | 649 if (mts.bin == NEVER_BIN) { |
| (...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1023 flags)); | 1004 flags)); |
| 1024 DCHECK(tiles_.find(tile->id()) == tiles_.end()); | 1005 DCHECK(tiles_.find(tile->id()) == tiles_.end()); |
| 1025 | 1006 |
| 1026 tiles_[tile->id()] = tile; | 1007 tiles_[tile->id()] = tile; |
| 1027 used_layer_counts_[tile->layer_id()]++; | 1008 used_layer_counts_[tile->layer_id()]++; |
| 1028 prioritized_tiles_dirty_ = true; | 1009 prioritized_tiles_dirty_ = true; |
| 1029 return tile; | 1010 return tile; |
| 1030 } | 1011 } |
| 1031 | 1012 |
| 1032 } // namespace cc | 1013 } // namespace cc |
| OLD | NEW |