Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / rendering / ClipRectsCache.h
1 // Copyright 2014 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 #ifndef ClipRectsCache_h
6 #define ClipRectsCache_h
7
8 #include "core/rendering/ClipRects.h"
9
10 #if ENABLE(ASSERT)
11 #include "core/rendering/RenderBox.h" // For OverlayScrollbarSizeRelevancy.
12 #endif
13
14 namespace blink {
15
16 enum ClipRectsCacheSlot {
17     // Relative to the ancestor treated as the root (e.g. transformed layer). Used for hit testing.
18     RootRelativeClipRects,
19
20     // Relative to the RenderView's layer. Used for compositing overlap testing.
21     AbsoluteClipRects,
22
23     // Relative to painting ancestor. Used for painting.
24     PaintingClipRects,
25     PaintingClipRectsIgnoringOverflowClip,
26
27     NumberOfClipRectsCacheSlots,
28     UncachedClipRects,
29 };
30
31 class ClipRectsCache {
32     WTF_MAKE_FAST_ALLOCATED;
33 public:
34     struct Entry {
35         Entry()
36             : root(0)
37 #if ENABLE(ASSERT)
38             , scrollbarRelevancy(IgnoreOverlayScrollbarSize)
39 #endif
40         {
41         }
42
43         const RenderLayer* root;
44         RefPtr<ClipRects> clipRects;
45 #if ENABLE(ASSERT)
46         OverlayScrollbarSizeRelevancy scrollbarRelevancy;
47 #endif
48     };
49
50     Entry& get(ClipRectsCacheSlot slot)
51     {
52         ASSERT(slot < NumberOfClipRectsCacheSlots);
53         return m_entries[slot];
54     }
55
56     void clear(ClipRectsCacheSlot slot)
57     {
58         ASSERT(slot < NumberOfClipRectsCacheSlots);
59         m_entries[slot] = Entry();
60     }
61
62 private:
63     Entry m_entries[NumberOfClipRectsCacheSlots];
64 };
65
66 } // namespace blink
67
68 #endif // ClipRectsCache_h