• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 {
EntryEntry35         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 
get(ClipRectsCacheSlot slot)50     Entry& get(ClipRectsCacheSlot slot)
51     {
52         ASSERT(slot < NumberOfClipRectsCacheSlots);
53         return m_entries[slot];
54     }
55 
clear(ClipRectsCacheSlot slot)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
69