• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3 // found in the LICENSE file.
4 
5 #include "cc/resources/priority_calculator.h"
6 
7 #include <algorithm>
8 
9 #include "ui/gfx/rect.h"
10 
11 namespace cc {
12 
13 static const int kNothingPriorityCutoff = -3;
14 
15 static const int kMostHighPriority = -2;
16 
17 static const int kUIDrawsToRootSurfacePriority = -1;
18 static const int kVisibleDrawsToRootSurfacePriority = 0;
19 static const int kRenderSurfacesPriority = 1;
20 static const int kUIDoesNotDrawToRootSurfacePriority = 2;
21 static const int kVisibleDoesNotDrawToRootSurfacePriority = 3;
22 
23 static const int kVisibleOnlyPriorityCutoff = 4;
24 
25 // The lower digits are how far from being visible the texture is,
26 // in pixels.
27 static const int kNotVisibleBasePriority = 1000000;
28 static const int kNotVisibleLimitPriority = 1900000;
29 
30 // Arbitrarily define "nearby" to be 2000 pixels. A better estimate
31 // would be percent-of-viewport or percent-of-screen.
32 static const int kVisibleAndNearbyPriorityCutoff =
33     kNotVisibleBasePriority + 2000;
34 
35 // Small animated layers are treated as though they are 512 pixels
36 // from being visible.
37 static const int kSmallAnimatedLayerPriority = kNotVisibleBasePriority + 512;
38 
39 static const int kLingeringBasePriority = 2000000;
40 static const int kLingeringLimitPriority = 2900000;
41 
42 static const int kMostLowPriority = 3000000;
43 
44 static const int kEverythingPriorityCutoff = 3000001;
45 
46 // static
UIPriority(bool draws_to_root_surface)47 int PriorityCalculator::UIPriority(bool draws_to_root_surface) {
48   return draws_to_root_surface ? kUIDrawsToRootSurfacePriority
49                                : kUIDoesNotDrawToRootSurfacePriority;
50 }
51 
52 // static
VisiblePriority(bool draws_to_root_surface)53 int PriorityCalculator::VisiblePriority(bool draws_to_root_surface) {
54   return draws_to_root_surface ? kVisibleDrawsToRootSurfacePriority
55                                : kVisibleDoesNotDrawToRootSurfacePriority;
56 }
57 
58 // static
RenderSurfacePriority()59 int PriorityCalculator::RenderSurfacePriority() {
60   return kRenderSurfacesPriority;
61 }
62 
63 // static
LingeringPriority(int previous_priority)64 int PriorityCalculator::LingeringPriority(int previous_priority) {
65   // TODO(reveman): We should remove this once we have priorities for all
66   // textures (we can't currently calculate distances for off-screen textures).
67   return std::min(kLingeringLimitPriority,
68                   std::max(kLingeringBasePriority, previous_priority + 1));
69 }
70 
71 // static
PriorityFromDistance(const gfx::Rect & visible_rect,const gfx::Rect & texture_rect,bool draws_to_root_surface)72 int PriorityCalculator::PriorityFromDistance(const gfx::Rect& visible_rect,
73                                              const gfx::Rect& texture_rect,
74                                              bool draws_to_root_surface) {
75   int distance = visible_rect.ManhattanInternalDistance(texture_rect);
76   if (!distance)
77     return VisiblePriority(draws_to_root_surface);
78   return std::min(kNotVisibleLimitPriority, kNotVisibleBasePriority + distance);
79 }
80 
81 // static
SmallAnimatedLayerMinPriority()82 int PriorityCalculator::SmallAnimatedLayerMinPriority() {
83   return kSmallAnimatedLayerPriority;
84 }
85 
86 // static
HighestPriority()87 int PriorityCalculator::HighestPriority() {
88   return kMostHighPriority;
89 }
90 
91 // static
LowestPriority()92 int PriorityCalculator::LowestPriority() {
93   return kMostLowPriority;
94 }
95 
96 // static
AllowNothingCutoff()97 int PriorityCalculator::AllowNothingCutoff() {
98   return kNothingPriorityCutoff;
99 }
100 
101 // static
AllowVisibleOnlyCutoff()102 int PriorityCalculator::AllowVisibleOnlyCutoff() {
103   return kVisibleOnlyPriorityCutoff;
104 }
105 
106 // static
AllowVisibleAndNearbyCutoff()107 int PriorityCalculator::AllowVisibleAndNearbyCutoff() {
108   return kVisibleAndNearbyPriorityCutoff;
109 }
110 
111 // static
AllowEverythingCutoff()112 int PriorityCalculator::AllowEverythingCutoff() {
113   return kEverythingPriorityCutoff;
114 }
115 
116 }  // namespace cc
117