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 <sstream> | |
| 9 #include <string> | |
| 10 #include <vector> | |
| 11 | |
| 8 namespace cc { | 12 namespace cc { |
| 9 | 13 |
| 10 // Ensure this stays in sync with MainThreadScrollingReason in histograms.xml. | 14 // Ensure this stays in sync with MainThreadScrollingReason in histograms.xml. |
| 11 // When adding a new MainThreadScrollingReason, make sure the corresponding | 15 // When adding a new MainThreadScrollingReason, make sure the corresponding |
| 12 // [MainThread/Compositor]CanSetScrollReasons function is also updated. | 16 // [MainThread/Compositor]CanSetScrollReasons function is also updated. |
| 13 struct MainThreadScrollingReason { | 17 struct MainThreadScrollingReason { |
| 14 // Non-transient scrolling reasons. | 18 // Non-transient scrolling reasons. |
| 15 enum : uint32_t { kNotScrollingOnMain = 0 }; | 19 enum : uint32_t { kNotScrollingOnMain = 0 }; |
| 16 enum : uint32_t { kHasBackgroundAttachmentFixedObjects = 1 << 0 }; | 20 enum : uint32_t { kHasBackgroundAttachmentFixedObjects = 1 << 0 }; |
| 17 enum : uint32_t { kHasNonLayerViewportConstrainedObjects = 1 << 1 }; | 21 enum : uint32_t { kHasNonLayerViewportConstrainedObjects = 1 << 1 }; |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 48 | 52 |
| 49 // Returns true if the given MainThreadScrollingReason can be set by the | 53 // Returns true if the given MainThreadScrollingReason can be set by the |
| 50 // compositor. | 54 // compositor. |
| 51 static bool CompositorCanSetScrollReasons(uint32_t reasons) { | 55 static bool CompositorCanSetScrollReasons(uint32_t reasons) { |
| 52 uint32_t reasons_set_by_compositor = | 56 uint32_t reasons_set_by_compositor = |
| 53 kNonFastScrollableRegion | kEventHandlers | kFailedHitTest | | 57 kNonFastScrollableRegion | kEventHandlers | kFailedHitTest | |
| 54 kNoScrollingLayer | kNotScrollable | kContinuingMainThreadScroll | | 58 kNoScrollingLayer | kNotScrollable | kContinuingMainThreadScroll | |
| 55 kNonInvertibleTransform | kPageBasedScrolling; | 59 kNonInvertibleTransform | kPageBasedScrolling; |
| 56 return (reasons & reasons_set_by_compositor) == reasons; | 60 return (reasons & reasons_set_by_compositor) == reasons; |
| 57 } | 61 } |
| 62 | |
| 63 static std::string mainThreadScrollingReasonsAsText(uint32_t reasons) { | |
| 64 std::stringstream ss; | |
| 65 std::vector<std::string> result_as_array = | |
| 66 mainThreadScrollingReasonsAsStringArray(reasons); | |
| 67 size_t array_length = result_as_array.size(); | |
| 68 | |
| 69 for (size_t i = 0; i < array_length - 1; ++i) { | |
| 70 ss << result_as_array[i] << ", "; | |
| 71 } | |
| 72 if (array_length) { | |
| 73 ss << result_as_array[array_length - 1]; | |
| 74 return ss.str(); | |
| 75 } | |
| 76 | |
| 77 return ""; | |
| 78 } | |
| 79 | |
| 80 static std::vector<std::string> mainThreadScrollingReasonsAsStringArray( | |
| 81 uint32_t reasons) { | |
|
Ian Vollick
2016/07/12 15:12:13
Perhaps this could convert to a TracedValue direct
sahel
2016/07/12 17:20:59
The format of the text that stringCoordinator need
sahel
2016/07/12 20:35:24
Done.
| |
| 82 std::vector<std::string> result; | |
| 83 if (reasons & | |
| 84 MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects) | |
| 85 result.push_back("Has background-attachment:fixed"); | |
| 86 if (reasons & | |
| 87 MainThreadScrollingReason::kHasNonLayerViewportConstrainedObjects) | |
| 88 result.push_back("Has non-layer viewport-constrained objects"); | |
| 89 if (reasons & MainThreadScrollingReason::kThreadedScrollingDisabled) | |
| 90 result.push_back("Threaded scrolling is disabled"); | |
| 91 if (reasons & MainThreadScrollingReason::kScrollbarScrolling) | |
| 92 result.push_back("Scrollbar scrolling"); | |
| 93 if (reasons & MainThreadScrollingReason::kPageOverlay) | |
| 94 result.push_back("Page overlay"); | |
| 95 if (reasons & MainThreadScrollingReason::kAnimatingScrollOnMainThread) | |
| 96 result.push_back("Animating scroll on main thread"); | |
| 97 if (reasons & MainThreadScrollingReason::kHasStickyPositionObjects) | |
| 98 result.push_back("Has sticky position objects"); | |
| 99 if (reasons & MainThreadScrollingReason::kCustomScrollbarScrolling) | |
| 100 result.push_back("Custom scrollbar scrolling"); | |
| 101 | |
| 102 // Transient scrolling reasons. | |
| 103 if (reasons & MainThreadScrollingReason::kNonFastScrollableRegion) | |
| 104 result.push_back("Non fast scrollable region"); | |
| 105 if (reasons & MainThreadScrollingReason::kEventHandlers) | |
| 106 result.push_back("Event handlers"); | |
| 107 if (reasons & MainThreadScrollingReason::kFailedHitTest) | |
| 108 result.push_back("Failed hit test"); | |
| 109 if (reasons & MainThreadScrollingReason::kNoScrollingLayer) | |
| 110 result.push_back("No scrolling layer"); | |
| 111 if (reasons & MainThreadScrollingReason::kNotScrollable) | |
| 112 result.push_back("Not scrollable"); | |
| 113 if (reasons & MainThreadScrollingReason::kContinuingMainThreadScroll) | |
| 114 result.push_back("Continuing main thread scroll"); | |
| 115 if (reasons & MainThreadScrollingReason::kNonInvertibleTransform) | |
| 116 result.push_back("Non-invertible transform"); | |
| 117 if (reasons & MainThreadScrollingReason::kPageBasedScrolling) | |
| 118 result.push_back("Page-based scrolling"); | |
| 119 | |
| 120 return result; | |
| 121 } | |
| 58 }; | 122 }; |
| 59 | 123 |
| 60 } // namespace cc | 124 } // namespace cc |
| 61 | 125 |
| 62 #endif // CC_INPUT_MAIN_THREAD_SCROLLING_REASON_H_ | 126 #endif // CC_INPUT_MAIN_THREAD_SCROLLING_REASON_H_ |
| OLD | NEW |