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 |