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" |
11 | 11 |
12 namespace cc { | 12 namespace cc { |
13 | 13 |
14 // Ensure this stays in sync with MainThreadScrollingReason in histograms.xml. | 14 // Ensure this stays in sync with MainThreadScrollingReason in histograms.xml. |
15 // When adding a new MainThreadScrollingReason, make sure the corresponding | 15 // When adding a new MainThreadScrollingReason, make sure the corresponding |
16 // [MainThread/Compositor]CanSetScrollReasons function is also updated. | 16 // [MainThread/Compositor]CanSetScrollReasons function is also updated. |
17 struct MainThreadScrollingReason { | 17 struct MainThreadScrollingReason { |
18 // Non-transient scrolling reasons. | 18 // Non-transient scrolling reasons. |
19 enum : uint32_t { kNotScrollingOnMain = 0 }; | 19 enum : uint32_t { kNotScrollingOnMain = 0 }; |
20 enum : uint32_t { kHasBackgroundAttachmentFixedObjects = 1 << 0 }; | 20 enum : uint32_t { kHasBackgroundAttachmentFixedObjects = 1 << 0 }; |
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 enum : uint32_t { kAnimatingScrollOnMainThread = 1 << 13 }; | 25 // A scroll handled by the main thread can result in an animation running on |
26 // the main thread or on the compositor thread. | |
skobes
2016/09/01 04:00:18
This comment is a great explanation for why you ar
ymalik
2016/09/01 14:24:29
You're absolutely right. Fixed.
| |
27 enum : uint32_t { kHandlingScrollFromMainThread = 1 << 13 }; | |
26 enum : uint32_t { kHasStickyPositionObjects = 1 << 14 }; | 28 enum : uint32_t { kHasStickyPositionObjects = 1 << 14 }; |
27 enum : uint32_t { kCustomScrollbarScrolling = 1 << 15 }; | 29 enum : uint32_t { kCustomScrollbarScrolling = 1 << 15 }; |
28 | 30 |
29 // Transient scrolling reasons. These are computed for each scroll begin. | 31 // Transient scrolling reasons. These are computed for each scroll begin. |
30 enum : uint32_t { kNonFastScrollableRegion = 1 << 5 }; | 32 enum : uint32_t { kNonFastScrollableRegion = 1 << 5 }; |
31 enum : uint32_t { kEventHandlers = 1 << 6 }; | 33 enum : uint32_t { kEventHandlers = 1 << 6 }; |
32 enum : uint32_t { kFailedHitTest = 1 << 7 }; | 34 enum : uint32_t { kFailedHitTest = 1 << 7 }; |
33 enum : uint32_t { kNoScrollingLayer = 1 << 8 }; | 35 enum : uint32_t { kNoScrollingLayer = 1 << 8 }; |
34 enum : uint32_t { kNotScrollable = 1 << 9 }; | 36 enum : uint32_t { kNotScrollable = 1 << 9 }; |
35 enum : uint32_t { kContinuingMainThreadScroll = 1 << 10 }; | 37 enum : uint32_t { kContinuingMainThreadScroll = 1 << 10 }; |
36 enum : uint32_t { kNonInvertibleTransform = 1 << 11 }; | 38 enum : uint32_t { kNonInvertibleTransform = 1 << 11 }; |
37 enum : uint32_t { kPageBasedScrolling = 1 << 12 }; | 39 enum : uint32_t { kPageBasedScrolling = 1 << 12 }; |
38 | 40 |
39 // The number of flags in this struct (excluding itself). | 41 // The number of flags in this struct (excluding itself). |
40 enum : uint32_t { kMainThreadScrollingReasonCount = 17 }; | 42 enum : uint32_t { kMainThreadScrollingReasonCount = 17 }; |
41 | 43 |
42 // Returns true if the given MainThreadScrollingReason can be set by the main | 44 // Returns true if the given MainThreadScrollingReason can be set by the main |
43 // thread. | 45 // thread. |
44 static bool MainThreadCanSetScrollReasons(uint32_t reasons) { | 46 static bool MainThreadCanSetScrollReasons(uint32_t reasons) { |
45 uint32_t reasons_set_by_main_thread = | 47 uint32_t reasons_set_by_main_thread = |
46 kNotScrollingOnMain | kHasBackgroundAttachmentFixedObjects | | 48 kNotScrollingOnMain | kHasBackgroundAttachmentFixedObjects | |
47 kHasNonLayerViewportConstrainedObjects | kThreadedScrollingDisabled | | 49 kHasNonLayerViewportConstrainedObjects | kThreadedScrollingDisabled | |
48 kScrollbarScrolling | kPageOverlay | kAnimatingScrollOnMainThread | | 50 kScrollbarScrolling | kPageOverlay | kHandlingScrollFromMainThread | |
49 kHasStickyPositionObjects | kCustomScrollbarScrolling; | 51 kHasStickyPositionObjects | kCustomScrollbarScrolling; |
50 return (reasons & reasons_set_by_main_thread) == reasons; | 52 return (reasons & reasons_set_by_main_thread) == reasons; |
51 } | 53 } |
52 | 54 |
53 // Returns true if the given MainThreadScrollingReason can be set by the | 55 // Returns true if the given MainThreadScrollingReason can be set by the |
54 // compositor. | 56 // compositor. |
55 static bool CompositorCanSetScrollReasons(uint32_t reasons) { | 57 static bool CompositorCanSetScrollReasons(uint32_t reasons) { |
56 uint32_t reasons_set_by_compositor = | 58 uint32_t reasons_set_by_compositor = |
57 kNonFastScrollableRegion | kEventHandlers | kFailedHitTest | | 59 kNonFastScrollableRegion | kEventHandlers | kFailedHitTest | |
58 kNoScrollingLayer | kNotScrollable | kContinuingMainThreadScroll | | 60 kNoScrollingLayer | kNotScrollable | kContinuingMainThreadScroll | |
(...skipping 21 matching lines...) Expand all Loading... | |
80 tracedValue->AppendString("Has background-attachment:fixed"); | 82 tracedValue->AppendString("Has background-attachment:fixed"); |
81 if (reasons & | 83 if (reasons & |
82 MainThreadScrollingReason::kHasNonLayerViewportConstrainedObjects) | 84 MainThreadScrollingReason::kHasNonLayerViewportConstrainedObjects) |
83 tracedValue->AppendString("Has non-layer viewport-constrained objects"); | 85 tracedValue->AppendString("Has non-layer viewport-constrained objects"); |
84 if (reasons & MainThreadScrollingReason::kThreadedScrollingDisabled) | 86 if (reasons & MainThreadScrollingReason::kThreadedScrollingDisabled) |
85 tracedValue->AppendString("Threaded scrolling is disabled"); | 87 tracedValue->AppendString("Threaded scrolling is disabled"); |
86 if (reasons & MainThreadScrollingReason::kScrollbarScrolling) | 88 if (reasons & MainThreadScrollingReason::kScrollbarScrolling) |
87 tracedValue->AppendString("Scrollbar scrolling"); | 89 tracedValue->AppendString("Scrollbar scrolling"); |
88 if (reasons & MainThreadScrollingReason::kPageOverlay) | 90 if (reasons & MainThreadScrollingReason::kPageOverlay) |
89 tracedValue->AppendString("Page overlay"); | 91 tracedValue->AppendString("Page overlay"); |
90 if (reasons & MainThreadScrollingReason::kAnimatingScrollOnMainThread) | 92 if (reasons & MainThreadScrollingReason::kHandlingScrollFromMainThread) |
91 tracedValue->AppendString("Animating scroll on main thread"); | 93 tracedValue->AppendString("Handling scroll from main thread"); |
92 if (reasons & MainThreadScrollingReason::kHasStickyPositionObjects) | 94 if (reasons & MainThreadScrollingReason::kHasStickyPositionObjects) |
93 tracedValue->AppendString("Has sticky position objects"); | 95 tracedValue->AppendString("Has sticky position objects"); |
94 if (reasons & MainThreadScrollingReason::kCustomScrollbarScrolling) | 96 if (reasons & MainThreadScrollingReason::kCustomScrollbarScrolling) |
95 tracedValue->AppendString("Custom scrollbar scrolling"); | 97 tracedValue->AppendString("Custom scrollbar scrolling"); |
96 | 98 |
97 // Transient scrolling reasons. | 99 // Transient scrolling reasons. |
98 if (reasons & MainThreadScrollingReason::kNonFastScrollableRegion) | 100 if (reasons & MainThreadScrollingReason::kNonFastScrollableRegion) |
99 tracedValue->AppendString("Non fast scrollable region"); | 101 tracedValue->AppendString("Non fast scrollable region"); |
100 if (reasons & MainThreadScrollingReason::kEventHandlers) | 102 if (reasons & MainThreadScrollingReason::kEventHandlers) |
101 tracedValue->AppendString("Event handlers"); | 103 tracedValue->AppendString("Event handlers"); |
102 if (reasons & MainThreadScrollingReason::kFailedHitTest) | 104 if (reasons & MainThreadScrollingReason::kFailedHitTest) |
103 tracedValue->AppendString("Failed hit test"); | 105 tracedValue->AppendString("Failed hit test"); |
104 if (reasons & MainThreadScrollingReason::kNoScrollingLayer) | 106 if (reasons & MainThreadScrollingReason::kNoScrollingLayer) |
105 tracedValue->AppendString("No scrolling layer"); | 107 tracedValue->AppendString("No scrolling layer"); |
106 if (reasons & MainThreadScrollingReason::kNotScrollable) | 108 if (reasons & MainThreadScrollingReason::kNotScrollable) |
107 tracedValue->AppendString("Not scrollable"); | 109 tracedValue->AppendString("Not scrollable"); |
108 if (reasons & MainThreadScrollingReason::kContinuingMainThreadScroll) | 110 if (reasons & MainThreadScrollingReason::kContinuingMainThreadScroll) |
109 tracedValue->AppendString("Continuing main thread scroll"); | 111 tracedValue->AppendString("Continuing main thread scroll"); |
110 if (reasons & MainThreadScrollingReason::kNonInvertibleTransform) | 112 if (reasons & MainThreadScrollingReason::kNonInvertibleTransform) |
111 tracedValue->AppendString("Non-invertible transform"); | 113 tracedValue->AppendString("Non-invertible transform"); |
112 if (reasons & MainThreadScrollingReason::kPageBasedScrolling) | 114 if (reasons & MainThreadScrollingReason::kPageBasedScrolling) |
113 tracedValue->AppendString("Page-based scrolling"); | 115 tracedValue->AppendString("Page-based scrolling"); |
114 tracedValue->EndArray(); | 116 tracedValue->EndArray(); |
115 } | 117 } |
116 }; | 118 }; |
117 | 119 |
118 } // namespace cc | 120 } // namespace cc |
119 | 121 |
120 #endif // CC_INPUT_MAIN_THREAD_SCROLLING_REASON_H_ | 122 #endif // CC_INPUT_MAIN_THREAD_SCROLLING_REASON_H_ |
OLD | NEW |