OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CC_INPUT_MAIN_THREAD_SCROLLING_REASON_H_ | 5 #ifndef CC_INPUT_MAIN_THREAD_SCROLLING_REASON_H_ |
6 #define CC_INPUT_MAIN_THREAD_SCROLLING_REASON_H_ | 6 #define CC_INPUT_MAIN_THREAD_SCROLLING_REASON_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/trace_event/trace_event_argument.h" | 10 #include "base/trace_event/trace_event_argument.h" |
(...skipping 10 matching lines...) Expand all Loading... |
21 enum : uint32_t { kHasNonLayerViewportConstrainedObjects = 1 << 1 }; | 21 enum : uint32_t { kHasNonLayerViewportConstrainedObjects = 1 << 1 }; |
22 enum : uint32_t { kThreadedScrollingDisabled = 1 << 2 }; | 22 enum : uint32_t { kThreadedScrollingDisabled = 1 << 2 }; |
23 enum : uint32_t { kScrollbarScrolling = 1 << 3 }; | 23 enum : uint32_t { kScrollbarScrolling = 1 << 3 }; |
24 enum : uint32_t { kPageOverlay = 1 << 4 }; | 24 enum : uint32_t { kPageOverlay = 1 << 4 }; |
25 // This bit is set when any of the other main thread scrolling reasons cause | 25 // This bit is set when any of the other main thread scrolling reasons cause |
26 // an input event to be handled on the main thread, and the main thread | 26 // an input event to be handled on the main thread, and the main thread |
27 // blink::ScrollAnimator is in the middle of running a scroll offset | 27 // blink::ScrollAnimator is in the middle of running a scroll offset |
28 // animation. Note that a scroll handled by the main thread can result in an | 28 // animation. Note that a scroll handled by the main thread can result in an |
29 // animation running on the main thread or on the compositor thread. | 29 // animation running on the main thread or on the compositor thread. |
30 enum : uint32_t { kHandlingScrollFromMainThread = 1 << 13 }; | 30 enum : uint32_t { kHandlingScrollFromMainThread = 1 << 13 }; |
31 enum : uint32_t { kHasStickyPositionObjects = 1 << 14 }; | |
32 enum : uint32_t { kCustomScrollbarScrolling = 1 << 15 }; | 31 enum : uint32_t { kCustomScrollbarScrolling = 1 << 15 }; |
33 | 32 |
34 // Transient scrolling reasons. These are computed for each scroll begin. | 33 // Transient scrolling reasons. These are computed for each scroll begin. |
35 enum : uint32_t { kNonFastScrollableRegion = 1 << 5 }; | 34 enum : uint32_t { kNonFastScrollableRegion = 1 << 5 }; |
36 enum : uint32_t { kEventHandlers = 1 << 6 }; | 35 enum : uint32_t { kEventHandlers = 1 << 6 }; |
37 enum : uint32_t { kFailedHitTest = 1 << 7 }; | 36 enum : uint32_t { kFailedHitTest = 1 << 7 }; |
38 enum : uint32_t { kNoScrollingLayer = 1 << 8 }; | 37 enum : uint32_t { kNoScrollingLayer = 1 << 8 }; |
39 enum : uint32_t { kNotScrollable = 1 << 9 }; | 38 enum : uint32_t { kNotScrollable = 1 << 9 }; |
40 enum : uint32_t { kContinuingMainThreadScroll = 1 << 10 }; | 39 enum : uint32_t { kContinuingMainThreadScroll = 1 << 10 }; |
41 enum : uint32_t { kNonInvertibleTransform = 1 << 11 }; | 40 enum : uint32_t { kNonInvertibleTransform = 1 << 11 }; |
42 enum : uint32_t { kPageBasedScrolling = 1 << 12 }; | 41 enum : uint32_t { kPageBasedScrolling = 1 << 12 }; |
43 | 42 |
44 // The number of flags in this struct (excluding itself). | 43 // The number of flags in this struct (excluding itself). |
45 enum : uint32_t { kMainThreadScrollingReasonCount = 17 }; | 44 enum : uint32_t { kMainThreadScrollingReasonCount = 17 }; |
46 | 45 |
47 // Returns true if the given MainThreadScrollingReason can be set by the main | 46 // Returns true if the given MainThreadScrollingReason can be set by the main |
48 // thread. | 47 // thread. |
49 static bool MainThreadCanSetScrollReasons(uint32_t reasons) { | 48 static bool MainThreadCanSetScrollReasons(uint32_t reasons) { |
50 uint32_t reasons_set_by_main_thread = | 49 uint32_t reasons_set_by_main_thread = |
51 kNotScrollingOnMain | kHasBackgroundAttachmentFixedObjects | | 50 kNotScrollingOnMain | kHasBackgroundAttachmentFixedObjects | |
52 kHasNonLayerViewportConstrainedObjects | kThreadedScrollingDisabled | | 51 kHasNonLayerViewportConstrainedObjects | kThreadedScrollingDisabled | |
53 kScrollbarScrolling | kPageOverlay | kHandlingScrollFromMainThread | | 52 kScrollbarScrolling | kPageOverlay | kHandlingScrollFromMainThread | |
54 kHasStickyPositionObjects | kCustomScrollbarScrolling; | 53 kCustomScrollbarScrolling; |
55 return (reasons & reasons_set_by_main_thread) == reasons; | 54 return (reasons & reasons_set_by_main_thread) == reasons; |
56 } | 55 } |
57 | 56 |
58 // Returns true if the given MainThreadScrollingReason can be set by the | 57 // Returns true if the given MainThreadScrollingReason can be set by the |
59 // compositor. | 58 // compositor. |
60 static bool CompositorCanSetScrollReasons(uint32_t reasons) { | 59 static bool CompositorCanSetScrollReasons(uint32_t reasons) { |
61 uint32_t reasons_set_by_compositor = | 60 uint32_t reasons_set_by_compositor = |
62 kNonFastScrollableRegion | kEventHandlers | kFailedHitTest | | 61 kNonFastScrollableRegion | kEventHandlers | kFailedHitTest | |
63 kNoScrollingLayer | kNotScrollable | kContinuingMainThreadScroll | | 62 kNoScrollingLayer | kNotScrollable | kContinuingMainThreadScroll | |
64 kNonInvertibleTransform | kPageBasedScrolling; | 63 kNonInvertibleTransform | kPageBasedScrolling; |
(...skipping 22 matching lines...) Expand all Loading... |
87 MainThreadScrollingReason::kHasNonLayerViewportConstrainedObjects) | 86 MainThreadScrollingReason::kHasNonLayerViewportConstrainedObjects) |
88 tracedValue->AppendString("Has non-layer viewport-constrained objects"); | 87 tracedValue->AppendString("Has non-layer viewport-constrained objects"); |
89 if (reasons & MainThreadScrollingReason::kThreadedScrollingDisabled) | 88 if (reasons & MainThreadScrollingReason::kThreadedScrollingDisabled) |
90 tracedValue->AppendString("Threaded scrolling is disabled"); | 89 tracedValue->AppendString("Threaded scrolling is disabled"); |
91 if (reasons & MainThreadScrollingReason::kScrollbarScrolling) | 90 if (reasons & MainThreadScrollingReason::kScrollbarScrolling) |
92 tracedValue->AppendString("Scrollbar scrolling"); | 91 tracedValue->AppendString("Scrollbar scrolling"); |
93 if (reasons & MainThreadScrollingReason::kPageOverlay) | 92 if (reasons & MainThreadScrollingReason::kPageOverlay) |
94 tracedValue->AppendString("Page overlay"); | 93 tracedValue->AppendString("Page overlay"); |
95 if (reasons & MainThreadScrollingReason::kHandlingScrollFromMainThread) | 94 if (reasons & MainThreadScrollingReason::kHandlingScrollFromMainThread) |
96 tracedValue->AppendString("Handling scroll from main thread"); | 95 tracedValue->AppendString("Handling scroll from main thread"); |
97 if (reasons & MainThreadScrollingReason::kHasStickyPositionObjects) | |
98 tracedValue->AppendString("Has sticky position objects"); | |
99 if (reasons & MainThreadScrollingReason::kCustomScrollbarScrolling) | 96 if (reasons & MainThreadScrollingReason::kCustomScrollbarScrolling) |
100 tracedValue->AppendString("Custom scrollbar scrolling"); | 97 tracedValue->AppendString("Custom scrollbar scrolling"); |
101 | 98 |
102 // Transient scrolling reasons. | 99 // Transient scrolling reasons. |
103 if (reasons & MainThreadScrollingReason::kNonFastScrollableRegion) | 100 if (reasons & MainThreadScrollingReason::kNonFastScrollableRegion) |
104 tracedValue->AppendString("Non fast scrollable region"); | 101 tracedValue->AppendString("Non fast scrollable region"); |
105 if (reasons & MainThreadScrollingReason::kEventHandlers) | 102 if (reasons & MainThreadScrollingReason::kEventHandlers) |
106 tracedValue->AppendString("Event handlers"); | 103 tracedValue->AppendString("Event handlers"); |
107 if (reasons & MainThreadScrollingReason::kFailedHitTest) | 104 if (reasons & MainThreadScrollingReason::kFailedHitTest) |
108 tracedValue->AppendString("Failed hit test"); | 105 tracedValue->AppendString("Failed hit test"); |
109 if (reasons & MainThreadScrollingReason::kNoScrollingLayer) | 106 if (reasons & MainThreadScrollingReason::kNoScrollingLayer) |
110 tracedValue->AppendString("No scrolling layer"); | 107 tracedValue->AppendString("No scrolling layer"); |
111 if (reasons & MainThreadScrollingReason::kNotScrollable) | 108 if (reasons & MainThreadScrollingReason::kNotScrollable) |
112 tracedValue->AppendString("Not scrollable"); | 109 tracedValue->AppendString("Not scrollable"); |
113 if (reasons & MainThreadScrollingReason::kContinuingMainThreadScroll) | 110 if (reasons & MainThreadScrollingReason::kContinuingMainThreadScroll) |
114 tracedValue->AppendString("Continuing main thread scroll"); | 111 tracedValue->AppendString("Continuing main thread scroll"); |
115 if (reasons & MainThreadScrollingReason::kNonInvertibleTransform) | 112 if (reasons & MainThreadScrollingReason::kNonInvertibleTransform) |
116 tracedValue->AppendString("Non-invertible transform"); | 113 tracedValue->AppendString("Non-invertible transform"); |
117 if (reasons & MainThreadScrollingReason::kPageBasedScrolling) | 114 if (reasons & MainThreadScrollingReason::kPageBasedScrolling) |
118 tracedValue->AppendString("Page-based scrolling"); | 115 tracedValue->AppendString("Page-based scrolling"); |
119 tracedValue->EndArray(); | 116 tracedValue->EndArray(); |
120 } | 117 } |
121 }; | 118 }; |
122 | 119 |
123 } // namespace cc | 120 } // namespace cc |
124 | 121 |
125 #endif // CC_INPUT_MAIN_THREAD_SCROLLING_REASON_H_ | 122 #endif // CC_INPUT_MAIN_THREAD_SCROLLING_REASON_H_ |
OLD | NEW |