Implement android_webview url intercepting.
[chromium-blink-merge.git] / cc / priority_calculator.cc
blob055520c974392f8b1a17cb2e075e2d3a5b1ab25c
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.
5 #include "config.h"
7 #include "CCPriorityCalculator.h"
9 using namespace std;
11 namespace cc {
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,
20 // in pixels.
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;
31 // static
32 int CCPriorityCalculator::uiPriority(bool drawsToRootSurface)
34 return drawsToRootSurface ? uiDrawsToRootSurfacePriority : uiDoesNotDrawToRootSurfacePriority;
37 // static
38 int CCPriorityCalculator::visiblePriority(bool drawsToRootSurface)
40 return drawsToRootSurface ? visibleDrawsToRootSurfacePriority : visibleDoesNotDrawToRootSurfacePriority;
43 // static
44 int CCPriorityCalculator::renderSurfacePriority()
46 return renderSurfacesPriority;
49 // static
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));
59 namespace {
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);
65 return (x + y);
69 // static
70 int CCPriorityCalculator::priorityFromDistance(const IntRect& visibleRect, const IntRect& textureRect, bool drawsToRootSurface)
72 int distance = manhattanDistance(visibleRect, textureRect);
73 if (!distance)
74 return visiblePriority(drawsToRootSurface);
75 return min(notVisibleLimitPriority, notVisibleBasePriority + distance);
78 // static
79 int CCPriorityCalculator::smallAnimatedLayerMinPriority()
81 return smallAnimatedLayerPriority;
84 } // cc