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