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.
7 #include "CCPriorityCalculator.h"
13 static const int uiDrawsToRootSurfacePriority
= -1;
14 static const int visibleDrawsToRootSurfacePriority
= 0;
15 static const int renderSurfacesPriority
= 1;
16 static const int uiDoesNotDrawToRootSurfacePriority
= 2;
17 static const int visibleDoesNotDrawToRootSurfacePriority
= 3;
19 // The lower digits are how far from being visible the texture is,
21 static const int notVisibleBasePriority
= 1000000;
22 static const int notVisibleLimitPriority
= 1900000;
24 // Small animated layers are treated as though they are 512 pixels
25 // from being visible.
26 static const int smallAnimatedLayerPriority
= notVisibleBasePriority
+ 512;
28 static const int lingeringBasePriority
= 2000000;
29 static const int lingeringLimitPriority
= 2900000;
32 int CCPriorityCalculator::uiPriority(bool drawsToRootSurface
)
34 return drawsToRootSurface
? uiDrawsToRootSurfacePriority
: uiDoesNotDrawToRootSurfacePriority
;
38 int CCPriorityCalculator::visiblePriority(bool drawsToRootSurface
)
40 return drawsToRootSurface
? visibleDrawsToRootSurfacePriority
: visibleDoesNotDrawToRootSurfacePriority
;
44 int CCPriorityCalculator::renderSurfacePriority()
46 return renderSurfacesPriority
;
50 int CCPriorityCalculator::lingeringPriority(int previousPriority
)
52 // FIXME: We should remove this once we have priorities for all
53 // textures (we can't currently calculate distances for
54 // off-screen textures).
55 return min(lingeringLimitPriority
,
56 max(lingeringBasePriority
, previousPriority
+ 1));
60 int manhattanDistance(const IntRect
& a
, const IntRect
& b
)
62 IntRect c
= unionRect(a
, b
);
63 int x
= max(0, c
.width() - a
.width() - b
.width() + 1);
64 int y
= max(0, c
.height() - a
.height() - b
.height() + 1);
70 int CCPriorityCalculator::priorityFromDistance(const IntRect
& visibleRect
, const IntRect
& textureRect
, bool drawsToRootSurface
)
72 int distance
= manhattanDistance(visibleRect
, textureRect
);
74 return visiblePriority(drawsToRootSurface
);
75 return min(notVisibleLimitPriority
, notVisibleBasePriority
+ distance
);
79 int CCPriorityCalculator::smallAnimatedLayerMinPriority()
81 return smallAnimatedLayerPriority
;