Index: cc/tile_priority.h |
diff --git a/cc/tile_priority.h b/cc/tile_priority.h |
index fd257f090ed40b1a0ca5a22c5daf91fe475b4a1f..94bbed25c9fae8c3a613d53f54e905c36db22c2c 100644 |
--- a/cc/tile_priority.h |
+++ b/cc/tile_priority.h |
@@ -12,37 +12,63 @@ |
namespace cc { |
-struct TilePriority { |
- // Set to true for tiles that should be favored during, for example, |
- // scrolls. |
- bool on_primary_tree; |
- |
- // A given layer may have multiple tilings, of differing quality. |
- // would_be_drawn is set for the tiles that are visible that would be |
- // drawn if they were chosen. |
- bool would_be_drawn; |
+enum TileResolution { |
+ LOW_RESOLUTION = 0 , |
+ HIGH_RESOLUTION = 1, |
+ NON_IDEAL_RESOLUTION = 2 |
+}; |
- // We expect it to be useful soon. |
- bool nice_to_have; |
+struct TilePriority { |
+ TilePriority() |
+ : resolution(NON_IDEAL_RESOLUTION), |
+ time_to_visible_in_seconds(std::numeric_limits<float>::max()), |
+ time_to_ideal_resolution_in_seconds(std::numeric_limits<float>::max()), |
+ distance_to_visible_in_pixels(std::numeric_limits<float>::max()) {} |
+ |
+ TilePriority(const TilePriority& active, const TilePriority& pending) { |
+ if (active.resolution == HIGH_RESOLUTION || |
+ pending.resolution == HIGH_RESOLUTION) |
+ resolution = HIGH_RESOLUTION; |
+ else if (active.resolution == LOW_RESOLUTION || |
+ pending.resolution == LOW_RESOLUTION) |
+ resolution = LOW_RESOLUTION; |
+ else |
+ resolution = NON_IDEAL_RESOLUTION; |
+ |
+ time_to_visible_in_seconds = |
+ std::min(active.time_to_visible_in_seconds, |
+ pending.time_to_visible_in_seconds); |
+ time_to_ideal_resolution_in_seconds = |
+ std::min(active.time_to_ideal_resolution_in_seconds, |
+ pending.time_to_ideal_resolution_in_seconds); |
+ distance_to_visible_in_pixels = |
+ std::min(active.distance_to_visible_in_pixels, |
+ pending.distance_to_visible_in_pixels); |
+ } |
- // Used to prefer tiles near to the viewport. |
- float distance_to_viewport; |
+ float time_to_needed_in_seconds() const { |
+ return std::min(time_to_visible_in_seconds, |
+ time_to_ideal_resolution_in_seconds); |
+ } |
- // TODO(enne): some metric that penalizes blurriness. |
+ TileResolution resolution; |
+ float time_to_visible_in_seconds; |
+ float time_to_ideal_resolution_in_seconds; |
+ float distance_to_visible_in_pixels; |
}; |
enum TileMemoryLimitPolicy { |
// Nothing. |
ALLOW_NOTHING, |
- // Use as little as possible. |
- ALLOW_ONLY_REQUIRED, // On primary tree, would be drawn. |
+ // You might be made visible, but you're not being interacted with. |
+ ALLOW_ABSOLUTE_MINIMUM, // Tall. |
- // Use as little as possible. |
- ALLOW_NICE_TO_HAVE, // On either tree, nice to have |
+ // You're being interacted with, but we're low on memory. |
+ ALLOW_PREPAINT_ONLY, // Grande. |
- // Use as much memory, up to memory size. |
- ALLOW_ANYTHING, |
+ // You're the only thing in town. Go crazy. |
+ ALLOW_ANYTHING, // Venti. |
}; |
class GlobalStateThatImpactsTilePriority { |
@@ -50,9 +76,7 @@ class GlobalStateThatImpactsTilePriority { |
GlobalStateThatImpactsTilePriority() |
: memory_limit_policy(ALLOW_NOTHING) |
, memory_limit_in_bytes(0) |
- , smoothness_takes_priority(false) |
- , pending_tree_frame_number(-1) |
- , active_tree_frame_number(-1) { |
+ , smoothness_takes_priority(false) { |
} |
TileMemoryLimitPolicy memory_limit_policy; |
@@ -61,24 +85,6 @@ class GlobalStateThatImpactsTilePriority { |
// Set when scrolling. |
bool smoothness_takes_priority; |
- |
- // Use -1 if no tree. |
- int pending_tree_frame_number; |
- int active_tree_frame_number; |
-}; |
- |
-class TilePriorityComparator { |
- public: |
- TilePriorityComparator(GlobalStateThatImpactsTilePriority& global_state) |
- : global_state_(global_state) {} |
- |
- int compare(const TilePriority& a, const TilePriority& b) { |
- // TODO(nduca,enne): Implement a comparator using the attributes here. |
- return 0; |
- } |
- |
- private: |
- GlobalStateThatImpactsTilePriority global_state_; |
}; |
} // namespace cc |