Chromium Code Reviews| Index: cc/input/main_thread_scrolling_reason.h |
| diff --git a/cc/input/main_thread_scrolling_reason.h b/cc/input/main_thread_scrolling_reason.h |
| index 522909afb1eaed1b959ee19f6abce3a53d13f053..9ae15b3b7768677e876e72527569a7b6b9068f26 100644 |
| --- a/cc/input/main_thread_scrolling_reason.h |
| +++ b/cc/input/main_thread_scrolling_reason.h |
| @@ -5,6 +5,10 @@ |
| #ifndef CC_INPUT_MAIN_THREAD_SCROLLING_REASON_H_ |
| #define CC_INPUT_MAIN_THREAD_SCROLLING_REASON_H_ |
| +#include <sstream> |
| +#include <string> |
| +#include <vector> |
| + |
| namespace cc { |
| // Ensure this stays in sync with MainThreadScrollingReason in histograms.xml. |
| @@ -55,6 +59,66 @@ struct MainThreadScrollingReason { |
| kNonInvertibleTransform | kPageBasedScrolling; |
| return (reasons & reasons_set_by_compositor) == reasons; |
| } |
| + |
| + static std::string mainThreadScrollingReasonsAsText(uint32_t reasons) { |
| + std::stringstream ss; |
| + std::vector<std::string> result_as_array = |
| + mainThreadScrollingReasonsAsStringArray(reasons); |
| + size_t array_length = result_as_array.size(); |
| + |
| + for (size_t i = 0; i < array_length - 1; ++i) { |
| + ss << result_as_array[i] << ", "; |
| + } |
| + if (array_length) { |
| + ss << result_as_array[array_length - 1]; |
| + return ss.str(); |
| + } |
| + |
| + return ""; |
| + } |
| + |
| + static std::vector<std::string> mainThreadScrollingReasonsAsStringArray( |
| + 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.
|
| + std::vector<std::string> result; |
| + if (reasons & |
| + MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects) |
| + result.push_back("Has background-attachment:fixed"); |
| + if (reasons & |
| + MainThreadScrollingReason::kHasNonLayerViewportConstrainedObjects) |
| + result.push_back("Has non-layer viewport-constrained objects"); |
| + if (reasons & MainThreadScrollingReason::kThreadedScrollingDisabled) |
| + result.push_back("Threaded scrolling is disabled"); |
| + if (reasons & MainThreadScrollingReason::kScrollbarScrolling) |
| + result.push_back("Scrollbar scrolling"); |
| + if (reasons & MainThreadScrollingReason::kPageOverlay) |
| + result.push_back("Page overlay"); |
| + if (reasons & MainThreadScrollingReason::kAnimatingScrollOnMainThread) |
| + result.push_back("Animating scroll on main thread"); |
| + if (reasons & MainThreadScrollingReason::kHasStickyPositionObjects) |
| + result.push_back("Has sticky position objects"); |
| + if (reasons & MainThreadScrollingReason::kCustomScrollbarScrolling) |
| + result.push_back("Custom scrollbar scrolling"); |
| + |
| + // Transient scrolling reasons. |
| + if (reasons & MainThreadScrollingReason::kNonFastScrollableRegion) |
| + result.push_back("Non fast scrollable region"); |
| + if (reasons & MainThreadScrollingReason::kEventHandlers) |
| + result.push_back("Event handlers"); |
| + if (reasons & MainThreadScrollingReason::kFailedHitTest) |
| + result.push_back("Failed hit test"); |
| + if (reasons & MainThreadScrollingReason::kNoScrollingLayer) |
| + result.push_back("No scrolling layer"); |
| + if (reasons & MainThreadScrollingReason::kNotScrollable) |
| + result.push_back("Not scrollable"); |
| + if (reasons & MainThreadScrollingReason::kContinuingMainThreadScroll) |
| + result.push_back("Continuing main thread scroll"); |
| + if (reasons & MainThreadScrollingReason::kNonInvertibleTransform) |
| + result.push_back("Non-invertible transform"); |
| + if (reasons & MainThreadScrollingReason::kPageBasedScrolling) |
| + result.push_back("Page-based scrolling"); |
| + |
| + return result; |
| + } |
| }; |
| } // namespace cc |