diff options
12 files changed, 51 insertions, 93 deletions
diff --git a/cc/blink/web_layer_impl.cc b/cc/blink/web_layer_impl.cc index 992157b..41efb47 100644 --- a/cc/blink/web_layer_impl.cc +++ b/cc/blink/web_layer_impl.cc @@ -343,51 +343,15 @@ bool WebLayerImpl::haveScrollEventHandlers() const { return layer_->have_scroll_event_handlers(); } -static_assert(static_cast<uint32_t>( - blink::WebMainThreadScrollingReason::NotScrollingOnMain) == - cc::MainThreadScrollingReason::kNotScrollingOnMain, - "MainThreadScrollingReason and " - "WebMainThreadScrollingReason enums must match"); -static_assert( - static_cast<uint32_t>(blink::WebMainThreadScrollingReason:: - HasBackgroundAttachmentFixedObjects) == - cc::MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects, - "MainThreadScrollingReason and " - "WebMainThreadScrollingReason enums must match"); -static_assert( - static_cast<uint32_t>(blink::WebMainThreadScrollingReason:: - HasNonLayerViewportConstrainedObjects) == - cc::MainThreadScrollingReason::kHasNonLayerViewportConstrainedObjects, - "MainThreadScrollingReason and " - "WebMainThreadScrollingReason enums must match"); -static_assert( - static_cast<uint32_t>( - blink::WebMainThreadScrollingReason::ThreadedScrollingDisabled) == - cc::MainThreadScrollingReason::kThreadedScrollingDisabled, - "MainThreadScrollingReason and " - "WebMainThreadScrollingReason enums must match"); -static_assert(static_cast<uint32_t>( - blink::WebMainThreadScrollingReason::ScrollBarScrolling) == - cc::MainThreadScrollingReason::kScrollbarScrolling, - "MainThreadScrollingReason and " - "WebMainThreadScrollingReason enums must match"); -static_assert( - static_cast<uint32_t>(blink::WebMainThreadScrollingReason::PageOverlay) == - cc::MainThreadScrollingReason::kPageOverlay, - "MainThreadScrollingReason and " - "WebMainThreadScrollingReason enums must match"); - void WebLayerImpl::addMainThreadScrollingReasons( - blink::WebMainThreadScrollingReason::WebMainThreadScrollingReason - main_thread_scrolling_reasons) { + uint32_t main_thread_scrolling_reasons) { DCHECK(main_thread_scrolling_reasons); // WebLayerImpl should only know about non-transient scrolling // reasons. Transient scrolling reasons are computed per hit test. - DCHECK_LE( - main_thread_scrolling_reasons, - static_cast< - blink::WebMainThreadScrollingReason::WebMainThreadScrollingReason>( - cc::MainThreadScrollingReason::kMaxNonTransientScrollingReason)); + // TODO(tdresser): This is comparing less than a bit flag but that's not valid + // if there is more than one reason given in |main_thread_scrolling_reasons|. + DCHECK_LE(main_thread_scrolling_reasons, + cc::MainThreadScrollingReason::kMaxNonTransientScrollingReason); layer_->AddMainThreadScrollingReasons(main_thread_scrolling_reasons); } diff --git a/cc/blink/web_layer_impl.h b/cc/blink/web_layer_impl.h index 482c633..f63ba55 100644 --- a/cc/blink/web_layer_impl.h +++ b/cc/blink/web_layer_impl.h @@ -22,7 +22,6 @@ #include "third_party/WebKit/public/platform/WebDoublePoint.h" #include "third_party/WebKit/public/platform/WebFloatPoint.h" #include "third_party/WebKit/public/platform/WebLayer.h" -#include "third_party/WebKit/public/platform/WebMainThreadScrollingReason.h" #include "third_party/WebKit/public/platform/WebPoint.h" #include "third_party/WebKit/public/platform/WebRect.h" #include "third_party/WebKit/public/platform/WebSize.h" @@ -130,8 +129,7 @@ class WebLayerImpl : public blink::WebLayer { void setHaveScrollEventHandlers(bool have_scroll_event_handlers) override; bool haveScrollEventHandlers() const override; void addMainThreadScrollingReasons( - blink::WebMainThreadScrollingReason::WebMainThreadScrollingReason - main_thread_scrolling_reasons) override; + uint32_t main_thread_scrolling_reasons) override; void clearMainThreadScrollingReasons() override; bool shouldScrollOnMainThread() const override; void setNonFastScrollableRegion( diff --git a/cc/input/main_thread_scrolling_reason.h b/cc/input/main_thread_scrolling_reason.h index 6ab823c..4de70f7 100644 --- a/cc/input/main_thread_scrolling_reason.h +++ b/cc/input/main_thread_scrolling_reason.h @@ -7,11 +7,7 @@ namespace cc { -// Ensure this stays in sync with MainThreadScrollingReason in histograms.xml, -// and that this extends ScrollingCoordinator::MainThreadScrollingReason. -// ScrollingCoordinator::MainThreadScrollingReason contains the flags -// which are associated with a layer. The flags only contained in -// MainThreadScrollingReason are computed for each scroll begin. +// Ensure this stays in sync with MainThreadScrollingReason in histograms.xml. struct MainThreadScrollingReason { // Non-transient scrolling reasons. enum : uint32_t { kNotScrollingOnMain = 0 }; @@ -22,7 +18,7 @@ struct MainThreadScrollingReason { enum : uint32_t { kPageOverlay = 1 << 4 }; enum : uint32_t { kMaxNonTransientScrollingReason = kPageOverlay }; - // Transient scrolling reasons. + // Transient scrolling reasons. These are computed for each scroll begin. enum : uint32_t { kNonFastScrollableRegion = 1 << 5 }; enum : uint32_t { kEventHandlers = 1 << 6 }; enum : uint32_t { kFailedHitTest = 1 << 7 }; diff --git a/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.cpp b/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.cpp index 4add053..8474484 100644 --- a/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.cpp +++ b/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.cpp @@ -51,6 +51,7 @@ #if OS(MACOSX) #include "platform/mac/ScrollAnimatorMac.h" #endif +#include "platform/scroll/MainThreadScrollingReason.h" #include "platform/scroll/ScrollAnimatorBase.h" #include "platform/scroll/ScrollbarTheme.h" #include "public/platform/Platform.h" @@ -344,7 +345,7 @@ void ScrollingCoordinator::scrollableAreaScrollbarLayerDidChange(ScrollableArea* if (!platformSupportsCoordinatedScrollbar) { if (scrollbarGraphicsLayer) { WebLayer* scrollbarLayer = toWebLayer(scrollbarGraphicsLayer); - scrollbarLayer->addMainThreadScrollingReasons(WebMainThreadScrollingReason::ScrollBarScrolling); + scrollbarLayer->addMainThreadScrollingReasons(MainThreadScrollingReason::kScrollbarScrolling); } return; } @@ -399,7 +400,7 @@ bool ScrollingCoordinator::scrollableAreaScrollLayerDidChange(ScrollableArea* sc // to set the WebLayer's scroll position at fractional precision otherwise the // WebLayer's position after snapping to device pixel can be off with regard to // fixed position elements. - if (m_lastMainThreadScrollingReasons & WebMainThreadScrollingReason::HasNonLayerViewportConstrainedObjects) { + if (m_lastMainThreadScrollingReasons & MainThreadScrollingReason::kHasNonLayerViewportConstrainedObjects) { webLayer->setScrollPositionDouble(DoublePoint(scrollableArea->scrollPosition() - scrollableArea->minimumScrollPosition())); } else { DoublePoint scrollPosition(scrollableArea->scrollPositionDouble() - scrollableArea->minimumScrollPositionDouble()); @@ -708,14 +709,14 @@ void ScrollingCoordinator::updateHaveScrollEventHandlers() } } -void ScrollingCoordinator::setShouldUpdateScrollLayerPositionOnMainThread(MainThreadScrollingReasons reasons) +void ScrollingCoordinator::setShouldUpdateScrollLayerPositionOnMainThread(MainThreadScrollingReasons mainThreadScrollingReasons) { if (!m_page->mainFrame()->isLocalFrame() || !m_page->deprecatedLocalMainFrame()->view()) return; if (WebLayer* scrollLayer = toWebLayer(m_page->deprecatedLocalMainFrame()->view()->layerForScrolling())) { - m_lastMainThreadScrollingReasons = reasons; - if (reasons) - scrollLayer->addMainThreadScrollingReasons(static_cast<WebMainThreadScrollingReason::WebMainThreadScrollingReason>(reasons)); + m_lastMainThreadScrollingReasons = mainThreadScrollingReasons; + if (mainThreadScrollingReasons) + scrollLayer->addMainThreadScrollingReasons(mainThreadScrollingReasons); else scrollLayer->clearMainThreadScrollingReasons(); } @@ -1018,7 +1019,7 @@ MainThreadScrollingReasons ScrollingCoordinator::mainThreadScrollingReasons() co MainThreadScrollingReasons reasons = static_cast<MainThreadScrollingReasons>(0); if (!m_page->settings().threadedScrollingEnabled()) - reasons |= WebMainThreadScrollingReason::ThreadedScrollingDisabled; + reasons |= MainThreadScrollingReason::kThreadedScrollingDisabled; if (!m_page->mainFrame()->isLocalFrame()) return reasons; @@ -1035,7 +1036,7 @@ MainThreadScrollingReasons ScrollingCoordinator::mainThreadScrollingReasons() co continue; if (frameView->hasBackgroundAttachmentFixedObjects()) - reasons |= WebMainThreadScrollingReason::HasBackgroundAttachmentFixedObjects; + reasons |= MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects; FrameView::ScrollingReasons scrollingReasons = frameView->scrollingReasons(); const bool mayBeScrolledByInput = (scrollingReasons == FrameView::Scrollable); const bool mayBeScrolledByScript = mayBeScrolledByInput || (scrollingReasons == @@ -1046,7 +1047,7 @@ MainThreadScrollingReasons ScrollingCoordinator::mainThreadScrollingReasons() co // not let this move there path as an optimization, when we have slow-repaint // elements. if (mayBeScrolledByScript && hasVisibleSlowRepaintViewportConstrainedObjects(frameView)) { - reasons |= WebMainThreadScrollingReason::HasNonLayerViewportConstrainedObjects; + reasons |= MainThreadScrollingReason::kHasNonLayerViewportConstrainedObjects; } } @@ -1057,11 +1058,11 @@ String ScrollingCoordinator::mainThreadScrollingReasonsAsText(MainThreadScrollin { StringBuilder stringBuilder; - if (reasons & WebMainThreadScrollingReason::HasBackgroundAttachmentFixedObjects) + if (reasons & MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects) stringBuilder.appendLiteral("Has background-attachment:fixed, "); - if (reasons & WebMainThreadScrollingReason::HasNonLayerViewportConstrainedObjects) + if (reasons & MainThreadScrollingReason::kHasNonLayerViewportConstrainedObjects) stringBuilder.appendLiteral("Has non-layer viewport-constrained objects, "); - if (reasons & WebMainThreadScrollingReason::ThreadedScrollingDisabled) + if (reasons & MainThreadScrollingReason::kThreadedScrollingDisabled) stringBuilder.appendLiteral("Threaded scrolling is disabled, "); if (stringBuilder.length()) diff --git a/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.h b/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.h index fd48d40..882605d 100644 --- a/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.h +++ b/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.h @@ -30,8 +30,8 @@ #include "core/layout/LayoutObject.h" #include "platform/PlatformWheelEvent.h" #include "platform/geometry/IntRect.h" +#include "platform/scroll/MainThreadScrollingReason.h" #include "platform/scroll/ScrollTypes.h" -#include "public/platform/WebMainThreadScrollingReason.h" #include "wtf/Noncopyable.h" #include "wtf/text/WTFString.h" @@ -41,7 +41,7 @@ class WebScrollbarLayer; namespace blink { -typedef unsigned MainThreadScrollingReasons; +using MainThreadScrollingReasons = uint32_t; class LocalFrame; class FrameView; diff --git a/third_party/WebKit/Source/platform/blink_platform.gypi b/third_party/WebKit/Source/platform/blink_platform.gypi index bd43088..ecab3fc 100644 --- a/third_party/WebKit/Source/platform/blink_platform.gypi +++ b/third_party/WebKit/Source/platform/blink_platform.gypi @@ -852,6 +852,7 @@ 'plugins/PluginListBuilder.h', 'scheduler/CancellableTaskFactory.cpp', 'scheduler/CancellableTaskFactory.h', + 'scroll/MainThreadScrollingReason.h', 'scroll/ProgrammaticScrollAnimator.cpp', 'scroll/ProgrammaticScrollAnimator.h', 'scroll/ScrollAnimatorBase.cpp', diff --git a/third_party/WebKit/Source/platform/scroll/DEPS b/third_party/WebKit/Source/platform/scroll/DEPS new file mode 100644 index 0000000..8d825ff --- /dev/null +++ b/third_party/WebKit/Source/platform/scroll/DEPS @@ -0,0 +1,4 @@ +include_rules = [ + "+cc", + "-cc/blink", +] diff --git a/third_party/WebKit/Source/platform/scroll/MainThreadScrollingReason.h b/third_party/WebKit/Source/platform/scroll/MainThreadScrollingReason.h new file mode 100644 index 0000000..d043a42 --- /dev/null +++ b/third_party/WebKit/Source/platform/scroll/MainThreadScrollingReason.h @@ -0,0 +1,18 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef MainThreadScrollingReason_h +#define MainThreadScrollingReason_h + +#include "cc/input/main_thread_scrolling_reason.h" + +namespace blink { + +// A wrapper around cc's structure to expose it to core. +struct MainThreadScrollingReason : public cc::MainThreadScrollingReason { +}; + +} // namespace blink + +#endif diff --git a/third_party/WebKit/Source/web/PageOverlay.cpp b/third_party/WebKit/Source/web/PageOverlay.cpp index 0bcd39e..f44e6ff 100644 --- a/third_party/WebKit/Source/web/PageOverlay.cpp +++ b/third_party/WebKit/Source/web/PageOverlay.cpp @@ -35,6 +35,7 @@ #include "platform/graphics/GraphicsContext.h" #include "platform/graphics/GraphicsLayer.h" #include "platform/graphics/GraphicsLayerClient.h" +#include "platform/scroll/MainThreadScrollingReason.h" #include "public/platform/WebLayer.h" #include "public/web/WebViewClient.h" #include "web/WebDevToolsAgentImpl.h" @@ -85,7 +86,7 @@ void PageOverlay::update() // This is required for contents of overlay to stay in sync with the page while scrolling. WebLayer* platformLayer = m_layer->platformLayer(); - platformLayer->addMainThreadScrollingReasons(WebMainThreadScrollingReason::PageOverlay); + platformLayer->addMainThreadScrollingReasons(MainThreadScrollingReason::kPageOverlay); page->frameHost().visualViewport().containerLayer()->addChild(m_layer.get()); } diff --git a/third_party/WebKit/public/platform/DEPS b/third_party/WebKit/public/platform/DEPS index b93c3b2..51f379c 100644 --- a/third_party/WebKit/public/platform/DEPS +++ b/third_party/WebKit/public/platform/DEPS @@ -1,5 +1,7 @@ include_rules = [ "-bindings", + "+cc", + "-cc/blink", "-core", "-modules", "+platform", diff --git a/third_party/WebKit/public/platform/WebLayer.h b/third_party/WebKit/public/platform/WebLayer.h index 0d40182..617c869 100644 --- a/third_party/WebKit/public/platform/WebLayer.h +++ b/third_party/WebKit/public/platform/WebLayer.h @@ -32,7 +32,6 @@ #include "WebCompositorAnimation.h" #include "WebDoublePoint.h" #include "WebFloatPoint3D.h" -#include "WebMainThreadScrollingReason.h" #include "WebPoint.h" #include "WebRect.h" #include "WebScrollBlocksOn.h" @@ -209,7 +208,7 @@ public: virtual bool haveScrollEventHandlers() const = 0; // Indicates that this layer will always scroll on the main thread for the provided reason. - virtual void addMainThreadScrollingReasons(WebMainThreadScrollingReason::WebMainThreadScrollingReason) = 0; + virtual void addMainThreadScrollingReasons(uint32_t) = 0; // Indicates that the layer could scroll on the compositor thread. virtual void clearMainThreadScrollingReasons() = 0; virtual bool shouldScrollOnMainThread() const = 0; diff --git a/third_party/WebKit/public/platform/WebMainThreadScrollingReason.h b/third_party/WebKit/public/platform/WebMainThreadScrollingReason.h deleted file mode 100644 index c430d66..0000000 --- a/third_party/WebKit/public/platform/WebMainThreadScrollingReason.h +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef WebMainThreadScrollingReason_h -#define WebMainThreadScrollingReason_h - -#include "WebCommon.h" - -namespace blink { - -// Ensure this stays in sync with cc::MainThreadScrollingReason. -namespace WebMainThreadScrollingReason { -enum WebMainThreadScrollingReason { - NotScrollingOnMain = 0, - HasBackgroundAttachmentFixedObjects = 1 << 0, - HasNonLayerViewportConstrainedObjects = 1 << 1, - ThreadedScrollingDisabled = 1 << 2, - ScrollBarScrolling = 1 << 3, - PageOverlay = 1 << 4 -}; -} // namespace MainThreadScrollingReason - -} // namespace blink - -#endif |