Chromium Code Reviews| 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 13 matching lines...) Expand all Loading... | |
| 24 kScrollbarScrolling = 1 << 3, | 24 kScrollbarScrolling = 1 << 3, |
| 25 kPageOverlay = 1 << 4, | 25 kPageOverlay = 1 << 4, |
| 26 | 26 |
| 27 // This bit is set when any of the other main thread scrolling reasons cause | 27 // This bit is set when any of the other main thread scrolling reasons cause |
| 28 // an input event to be handled on the main thread, and the main thread | 28 // an input event to be handled on the main thread, and the main thread |
| 29 // blink::ScrollAnimator is in the middle of running a scroll offset | 29 // blink::ScrollAnimator is in the middle of running a scroll offset |
| 30 // animation. Note that a scroll handled by the main thread can result in an | 30 // animation. Note that a scroll handled by the main thread can result in an |
| 31 // animation running on the main thread or on the compositor thread. | 31 // animation running on the main thread or on the compositor thread. |
| 32 kHandlingScrollFromMainThread = 1 << 13, | 32 kHandlingScrollFromMainThread = 1 << 13, |
| 33 kCustomScrollbarScrolling = 1 << 15, | 33 kCustomScrollbarScrolling = 1 << 15, |
| 34 kHasOpacity = 1 << 16, | |
|
bokan
2016/12/13 14:38:56
kHasOpacityAndScrollDependent? A regular scroller
yigu
2016/12/13 20:54:10
It should scroll on main thread due to blending I
bokan
2016/12/14 13:28:58
Ah, of course, if it's transparent and low-DPI, we
bokan
2016/12/15 20:47:45
Hey Yi, I think this still hasn't been addressed.
| |
| 34 | 35 |
| 35 // Transient scrolling reasons. These are computed for each scroll begin. | 36 // Transient scrolling reasons. These are computed for each scroll begin. |
| 36 kNonFastScrollableRegion = 1 << 5, | 37 kNonFastScrollableRegion = 1 << 5, |
| 37 kFailedHitTest = 1 << 7, | 38 kFailedHitTest = 1 << 7, |
| 38 kNoScrollingLayer = 1 << 8, | 39 kNoScrollingLayer = 1 << 8, |
| 39 kNotScrollable = 1 << 9, | 40 kNotScrollable = 1 << 9, |
| 40 kContinuingMainThreadScroll = 1 << 10, | 41 kContinuingMainThreadScroll = 1 << 10, |
| 41 kNonInvertibleTransform = 1 << 11, | 42 kNonInvertibleTransform = 1 << 11, |
| 42 kPageBasedScrolling = 1 << 12, | 43 kPageBasedScrolling = 1 << 12, |
| 43 | 44 |
| 44 // The number of flags in this struct (excluding itself). | 45 // The number of flags in this struct (excluding itself). |
| 45 kMainThreadScrollingReasonCount = 17, | 46 kMainThreadScrollingReasonCount = 18, |
| 46 }; | 47 }; |
| 47 | 48 |
| 48 // Returns true if the given MainThreadScrollingReason can be set by the main | 49 // Returns true if the given MainThreadScrollingReason can be set by the main |
| 49 // thread. | 50 // thread. |
| 50 static bool MainThreadCanSetScrollReasons(uint32_t reasons) { | 51 static bool MainThreadCanSetScrollReasons(uint32_t reasons) { |
| 51 uint32_t reasons_set_by_main_thread = | 52 uint32_t reasons_set_by_main_thread = |
| 52 kNotScrollingOnMain | kHasBackgroundAttachmentFixedObjects | | 53 kNotScrollingOnMain | kHasBackgroundAttachmentFixedObjects | |
| 53 kHasNonLayerViewportConstrainedObjects | kThreadedScrollingDisabled | | 54 kHasNonLayerViewportConstrainedObjects | kThreadedScrollingDisabled | |
| 54 kScrollbarScrolling | kPageOverlay | kHandlingScrollFromMainThread | | 55 kScrollbarScrolling | kPageOverlay | kHandlingScrollFromMainThread | |
| 55 kCustomScrollbarScrolling; | 56 kCustomScrollbarScrolling | kHasOpacity; |
| 56 return (reasons & reasons_set_by_main_thread) == reasons; | 57 return (reasons & reasons_set_by_main_thread) == reasons; |
| 57 } | 58 } |
| 58 | 59 |
| 59 // Returns true if the given MainThreadScrollingReason can be set by the | 60 // Returns true if the given MainThreadScrollingReason can be set by the |
| 60 // compositor. | 61 // compositor. |
| 61 static bool CompositorCanSetScrollReasons(uint32_t reasons) { | 62 static bool CompositorCanSetScrollReasons(uint32_t reasons) { |
| 62 uint32_t reasons_set_by_compositor = | 63 uint32_t reasons_set_by_compositor = |
| 63 kNonFastScrollableRegion | kFailedHitTest | kNoScrollingLayer | | 64 kNonFastScrollableRegion | kFailedHitTest | kNoScrollingLayer | |
| 64 kNotScrollable | kContinuingMainThreadScroll | kNonInvertibleTransform | | 65 kNotScrollable | kContinuingMainThreadScroll | kNonInvertibleTransform | |
| 65 kPageBasedScrolling; | 66 kPageBasedScrolling; |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 90 if (reasons & MainThreadScrollingReason::kThreadedScrollingDisabled) | 91 if (reasons & MainThreadScrollingReason::kThreadedScrollingDisabled) |
| 91 tracedValue->AppendString("Threaded scrolling is disabled"); | 92 tracedValue->AppendString("Threaded scrolling is disabled"); |
| 92 if (reasons & MainThreadScrollingReason::kScrollbarScrolling) | 93 if (reasons & MainThreadScrollingReason::kScrollbarScrolling) |
| 93 tracedValue->AppendString("Scrollbar scrolling"); | 94 tracedValue->AppendString("Scrollbar scrolling"); |
| 94 if (reasons & MainThreadScrollingReason::kPageOverlay) | 95 if (reasons & MainThreadScrollingReason::kPageOverlay) |
| 95 tracedValue->AppendString("Page overlay"); | 96 tracedValue->AppendString("Page overlay"); |
| 96 if (reasons & MainThreadScrollingReason::kHandlingScrollFromMainThread) | 97 if (reasons & MainThreadScrollingReason::kHandlingScrollFromMainThread) |
| 97 tracedValue->AppendString("Handling scroll from main thread"); | 98 tracedValue->AppendString("Handling scroll from main thread"); |
| 98 if (reasons & MainThreadScrollingReason::kCustomScrollbarScrolling) | 99 if (reasons & MainThreadScrollingReason::kCustomScrollbarScrolling) |
| 99 tracedValue->AppendString("Custom scrollbar scrolling"); | 100 tracedValue->AppendString("Custom scrollbar scrolling"); |
| 101 if (reasons & MainThreadScrollingReason::kHasOpacity) | |
| 102 tracedValue->AppendString("Has opacity"); | |
| 100 | 103 |
| 101 // Transient scrolling reasons. | 104 // Transient scrolling reasons. |
| 102 if (reasons & MainThreadScrollingReason::kNonFastScrollableRegion) | 105 if (reasons & MainThreadScrollingReason::kNonFastScrollableRegion) |
| 103 tracedValue->AppendString("Non fast scrollable region"); | 106 tracedValue->AppendString("Non fast scrollable region"); |
| 104 if (reasons & MainThreadScrollingReason::kFailedHitTest) | 107 if (reasons & MainThreadScrollingReason::kFailedHitTest) |
| 105 tracedValue->AppendString("Failed hit test"); | 108 tracedValue->AppendString("Failed hit test"); |
| 106 if (reasons & MainThreadScrollingReason::kNoScrollingLayer) | 109 if (reasons & MainThreadScrollingReason::kNoScrollingLayer) |
| 107 tracedValue->AppendString("No scrolling layer"); | 110 tracedValue->AppendString("No scrolling layer"); |
| 108 if (reasons & MainThreadScrollingReason::kNotScrollable) | 111 if (reasons & MainThreadScrollingReason::kNotScrollable) |
| 109 tracedValue->AppendString("Not scrollable"); | 112 tracedValue->AppendString("Not scrollable"); |
| 110 if (reasons & MainThreadScrollingReason::kContinuingMainThreadScroll) | 113 if (reasons & MainThreadScrollingReason::kContinuingMainThreadScroll) |
| 111 tracedValue->AppendString("Continuing main thread scroll"); | 114 tracedValue->AppendString("Continuing main thread scroll"); |
| 112 if (reasons & MainThreadScrollingReason::kNonInvertibleTransform) | 115 if (reasons & MainThreadScrollingReason::kNonInvertibleTransform) |
| 113 tracedValue->AppendString("Non-invertible transform"); | 116 tracedValue->AppendString("Non-invertible transform"); |
| 114 if (reasons & MainThreadScrollingReason::kPageBasedScrolling) | 117 if (reasons & MainThreadScrollingReason::kPageBasedScrolling) |
| 115 tracedValue->AppendString("Page-based scrolling"); | 118 tracedValue->AppendString("Page-based scrolling"); |
| 116 tracedValue->EndArray(); | 119 tracedValue->EndArray(); |
| 117 } | 120 } |
| 118 }; | 121 }; |
| 119 | 122 |
| 120 } // namespace cc | 123 } // namespace cc |
| 121 | 124 |
| 122 #endif // CC_INPUT_MAIN_THREAD_SCROLLING_REASON_H_ | 125 #endif // CC_INPUT_MAIN_THREAD_SCROLLING_REASON_H_ |
| OLD | NEW |