author | Kartikaya Gupta <kgupta@mozilla.com> |
Wed, 06 Jan 2016 20:50:01 -0500 | |
changeset 278832 | 23c55d10a21998820a873e0c986a284659d0b733 |
parent 278831 | d4cf012ac235334cb77e83ef5e0d673c7269008b |
child 278833 | e9356c3b5e6f37276624019fac69ecbab164d87e |
push id | 69904 |
push user | kgupta@mozilla.com |
push date | Thu, 07 Jan 2016 01:56:42 +0000 |
treeherder | mozilla-inbound@e9356c3b5e6f [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | botond |
bugs | 1219352 |
milestone | 46.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
gfx/ipc/GfxMessageUtils.h | file | annotate | diff | comparison | revisions | |
gfx/layers/FrameMetrics.h | file | annotate | diff | comparison | revisions |
--- a/gfx/ipc/GfxMessageUtils.h +++ b/gfx/ipc/GfxMessageUtils.h @@ -679,96 +679,96 @@ struct ParamTraits<nsRegion> template <> struct ParamTraits<mozilla::layers::FrameMetrics> { typedef mozilla::layers::FrameMetrics paramType; static void Write(Message* aMsg, const paramType& aParam) { - WriteParam(aMsg, aParam.mScrollableRect); - WriteParam(aMsg, aParam.mViewport); - WriteParam(aMsg, aParam.mScrollOffset); - WriteParam(aMsg, aParam.mDisplayPort); - WriteParam(aMsg, aParam.mDisplayPortMargins); - WriteParam(aMsg, aParam.mUseDisplayPortMargins); - WriteParam(aMsg, aParam.mCriticalDisplayPort); - WriteParam(aMsg, aParam.mCompositionBounds); - WriteParam(aMsg, aParam.mRootCompositionSize); WriteParam(aMsg, aParam.mScrollId); WriteParam(aMsg, aParam.mScrollParentId); WriteParam(aMsg, aParam.mPresShellResolution); + WriteParam(aMsg, aParam.mCompositionBounds); + WriteParam(aMsg, aParam.mDisplayPort); + WriteParam(aMsg, aParam.mCriticalDisplayPort); + WriteParam(aMsg, aParam.mScrollableRect); WriteParam(aMsg, aParam.mCumulativeResolution); + WriteParam(aMsg, aParam.mDevPixelsPerCSSPixel); + WriteParam(aMsg, aParam.mScrollOffset); WriteParam(aMsg, aParam.mZoom); - WriteParam(aMsg, aParam.mDevPixelsPerCSSPixel); + WriteParam(aMsg, aParam.mScrollGeneration); + WriteParam(aMsg, aParam.mSmoothScrollOffset); + WriteParam(aMsg, aParam.mRootCompositionSize); + WriteParam(aMsg, aParam.mDisplayPortMargins); WriteParam(aMsg, aParam.mPresShellId); + WriteParam(aMsg, aParam.mViewport); + WriteParam(aMsg, aParam.mExtraResolution); + WriteParam(aMsg, aParam.mBackgroundColor); + WriteParam(aMsg, aParam.GetContentDescription()); + WriteParam(aMsg, aParam.mLineScrollAmount); + WriteParam(aMsg, aParam.mPageScrollAmount); + WriteParam(aMsg, aParam.mClipRect); + WriteParam(aMsg, aParam.mMaskLayerIndex); WriteParam(aMsg, aParam.mIsRootContent); WriteParam(aMsg, aParam.mHasScrollgrab); WriteParam(aMsg, aParam.mUpdateScrollOffset); - WriteParam(aMsg, aParam.mScrollGeneration); - WriteParam(aMsg, aParam.mExtraResolution); - WriteParam(aMsg, aParam.mBackgroundColor); WriteParam(aMsg, aParam.mDoSmoothScroll); - WriteParam(aMsg, aParam.mSmoothScrollOffset); - WriteParam(aMsg, aParam.GetLineScrollAmount()); - WriteParam(aMsg, aParam.GetPageScrollAmount()); - WriteParam(aMsg, aParam.AllowVerticalScrollWithWheel()); - WriteParam(aMsg, aParam.mClipRect); - WriteParam(aMsg, aParam.mMaskLayerIndex); + WriteParam(aMsg, aParam.mUseDisplayPortMargins); + WriteParam(aMsg, aParam.mAllowVerticalScrollWithWheel); WriteParam(aMsg, aParam.mIsLayersIdRoot); WriteParam(aMsg, aParam.mUsesContainerScrolling); WriteParam(aMsg, aParam.mIsScrollInfoLayer); - WriteParam(aMsg, aParam.GetContentDescription()); } static bool ReadContentDescription(const Message* aMsg, void** aIter, paramType* aResult) { nsCString str; if (!ReadParam(aMsg, aIter, &str)) { return false; } aResult->SetContentDescription(str); return true; } static bool Read(const Message* aMsg, void** aIter, paramType* aResult) { - return (ReadParam(aMsg, aIter, &aResult->mScrollableRect) && - ReadParam(aMsg, aIter, &aResult->mViewport) && - ReadParam(aMsg, aIter, &aResult->mScrollOffset) && - ReadParam(aMsg, aIter, &aResult->mDisplayPort) && - ReadParam(aMsg, aIter, &aResult->mDisplayPortMargins) && - ReadParam(aMsg, aIter, &aResult->mUseDisplayPortMargins) && - ReadParam(aMsg, aIter, &aResult->mCriticalDisplayPort) && - ReadParam(aMsg, aIter, &aResult->mCompositionBounds) && - ReadParam(aMsg, aIter, &aResult->mRootCompositionSize) && - ReadParam(aMsg, aIter, &aResult->mScrollId) && + return (ReadParam(aMsg, aIter, &aResult->mScrollId) && ReadParam(aMsg, aIter, &aResult->mScrollParentId) && ReadParam(aMsg, aIter, &aResult->mPresShellResolution) && + ReadParam(aMsg, aIter, &aResult->mCompositionBounds) && + ReadParam(aMsg, aIter, &aResult->mDisplayPort) && + ReadParam(aMsg, aIter, &aResult->mCriticalDisplayPort) && + ReadParam(aMsg, aIter, &aResult->mScrollableRect) && ReadParam(aMsg, aIter, &aResult->mCumulativeResolution) && + ReadParam(aMsg, aIter, &aResult->mDevPixelsPerCSSPixel) && + ReadParam(aMsg, aIter, &aResult->mScrollOffset) && ReadParam(aMsg, aIter, &aResult->mZoom) && - ReadParam(aMsg, aIter, &aResult->mDevPixelsPerCSSPixel) && + ReadParam(aMsg, aIter, &aResult->mScrollGeneration) && + ReadParam(aMsg, aIter, &aResult->mSmoothScrollOffset) && + ReadParam(aMsg, aIter, &aResult->mRootCompositionSize) && + ReadParam(aMsg, aIter, &aResult->mDisplayPortMargins) && ReadParam(aMsg, aIter, &aResult->mPresShellId) && + ReadParam(aMsg, aIter, &aResult->mViewport) && + ReadParam(aMsg, aIter, &aResult->mExtraResolution) && + ReadParam(aMsg, aIter, &aResult->mBackgroundColor) && + ReadContentDescription(aMsg, aIter, aResult) && + ReadParam(aMsg, aIter, &aResult->mLineScrollAmount) && + ReadParam(aMsg, aIter, &aResult->mPageScrollAmount) && + ReadParam(aMsg, aIter, &aResult->mClipRect) && + ReadParam(aMsg, aIter, &aResult->mMaskLayerIndex) && ReadParam(aMsg, aIter, &aResult->mIsRootContent) && ReadParam(aMsg, aIter, &aResult->mHasScrollgrab) && ReadParam(aMsg, aIter, &aResult->mUpdateScrollOffset) && - ReadParam(aMsg, aIter, &aResult->mScrollGeneration) && - ReadParam(aMsg, aIter, &aResult->mExtraResolution) && - ReadParam(aMsg, aIter, &aResult->mBackgroundColor) && ReadParam(aMsg, aIter, &aResult->mDoSmoothScroll) && - ReadParam(aMsg, aIter, &aResult->mSmoothScrollOffset) && - ReadParam(aMsg, aIter, &aResult->mLineScrollAmount) && - ReadParam(aMsg, aIter, &aResult->mPageScrollAmount) && + ReadParam(aMsg, aIter, &aResult->mUseDisplayPortMargins) && ReadParam(aMsg, aIter, &aResult->mAllowVerticalScrollWithWheel) && - ReadParam(aMsg, aIter, &aResult->mClipRect) && - ReadParam(aMsg, aIter, &aResult->mMaskLayerIndex) && ReadParam(aMsg, aIter, &aResult->mIsLayersIdRoot) && ReadParam(aMsg, aIter, &aResult->mUsesContainerScrolling) && - ReadParam(aMsg, aIter, &aResult->mIsScrollInfoLayer) && - ReadContentDescription(aMsg, aIter, aResult)); + ReadParam(aMsg, aIter, &aResult->mIsScrollInfoLayer)); } }; template<> struct ParamTraits<mozilla::layers::TextureFactoryIdentifier> { typedef mozilla::layers::TextureFactoryIdentifier paramType;
--- a/gfx/layers/FrameMetrics.h +++ b/gfx/layers/FrameMetrics.h @@ -34,85 +34,92 @@ public: // We use IDs to identify frames across processes. typedef uint64_t ViewID; static const ViewID NULL_SCROLL_ID; // This container layer does not scroll. static const ViewID START_SCROLL_ID = 2; // This is the ID that scrolling subframes // will begin at. static const FrameMetrics sNullMetrics; // We often need an empty metrics FrameMetrics() - : mPresShellResolution(1) + : mScrollId(NULL_SCROLL_ID) + , mScrollParentId(NULL_SCROLL_ID) + , mPresShellResolution(1) , mCompositionBounds(0, 0, 0, 0) , mDisplayPort(0, 0, 0, 0) , mCriticalDisplayPort(0, 0, 0, 0) , mScrollableRect(0, 0, 0, 0) , mCumulativeResolution() , mDevPixelsPerCSSPixel(1) - , mIsRootContent(false) - , mHasScrollgrab(false) - , mScrollId(NULL_SCROLL_ID) - , mScrollParentId(NULL_SCROLL_ID) , mScrollOffset(0, 0) , mZoom() - , mUpdateScrollOffset(false) , mScrollGeneration(0) - , mDoSmoothScroll(false) , mSmoothScrollOffset(0, 0) , mRootCompositionSize(0, 0) , mDisplayPortMargins(0, 0, 0, 0) - , mUseDisplayPortMargins(false) , mPresShellId(-1) , mViewport(0, 0, 0, 0) , mExtraResolution() , mBackgroundColor() + , mContentDescription() , mLineScrollAmount(0, 0) , mPageScrollAmount(0, 0) + , mClipRect() + , mMaskLayerIndex() + , mIsRootContent(false) + , mHasScrollgrab(false) + , mUpdateScrollOffset(false) + , mDoSmoothScroll(false) + , mUseDisplayPortMargins(false) , mAllowVerticalScrollWithWheel(false) , mIsLayersIdRoot(false) , mUsesContainerScrolling(false) , mIsScrollInfoLayer(false) { } // Default copy ctor and operator= are fine bool operator==(const FrameMetrics& aOther) const { - return mCompositionBounds.IsEqualEdges(aOther.mCompositionBounds) && - mRootCompositionSize == aOther.mRootCompositionSize && + // Put mScrollId at the top since it's the most likely one to fail. + return mScrollId == aOther.mScrollId && + mScrollParentId == aOther.mScrollParentId && + mPresShellResolution == aOther.mPresShellResolution && + mCompositionBounds.IsEqualEdges(aOther.mCompositionBounds) && mDisplayPort.IsEqualEdges(aOther.mDisplayPort) && - mDisplayPortMargins == aOther.mDisplayPortMargins && - mUseDisplayPortMargins == aOther.mUseDisplayPortMargins && mCriticalDisplayPort.IsEqualEdges(aOther.mCriticalDisplayPort) && - mViewport.IsEqualEdges(aOther.mViewport) && mScrollableRect.IsEqualEdges(aOther.mScrollableRect) && - mPresShellResolution == aOther.mPresShellResolution && mCumulativeResolution == aOther.mCumulativeResolution && mDevPixelsPerCSSPixel == aOther.mDevPixelsPerCSSPixel && + mScrollOffset == aOther.mScrollOffset && + // don't compare mZoom + mScrollGeneration == aOther.mScrollGeneration && + mSmoothScrollOffset == aOther.mSmoothScrollOffset && + mRootCompositionSize == aOther.mRootCompositionSize && + mDisplayPortMargins == aOther.mDisplayPortMargins && mPresShellId == aOther.mPresShellId && + mViewport.IsEqualEdges(aOther.mViewport) && + mExtraResolution == aOther.mExtraResolution && + mBackgroundColor == aOther.mBackgroundColor && + // don't compare mContentDescription + mLineScrollAmount == aOther.mLineScrollAmount && + mPageScrollAmount == aOther.mPageScrollAmount && + mClipRect == aOther.mClipRect && + mMaskLayerIndex == aOther.mMaskLayerIndex && mIsRootContent == aOther.mIsRootContent && - mScrollId == aOther.mScrollId && - mScrollParentId == aOther.mScrollParentId && - mScrollOffset == aOther.mScrollOffset && - mSmoothScrollOffset == aOther.mSmoothScrollOffset && mHasScrollgrab == aOther.mHasScrollgrab && mUpdateScrollOffset == aOther.mUpdateScrollOffset && - mScrollGeneration == aOther.mScrollGeneration && - mExtraResolution == aOther.mExtraResolution && - mBackgroundColor == aOther.mBackgroundColor && mDoSmoothScroll == aOther.mDoSmoothScroll && - mLineScrollAmount == aOther.mLineScrollAmount && - mPageScrollAmount == aOther.mPageScrollAmount && + mUseDisplayPortMargins == aOther.mUseDisplayPortMargins && mAllowVerticalScrollWithWheel == aOther.mAllowVerticalScrollWithWheel && - mClipRect == aOther.mClipRect && - mMaskLayerIndex == aOther.mMaskLayerIndex && mIsLayersIdRoot == aOther.mIsLayersIdRoot && mUsesContainerScrolling == aOther.mUsesContainerScrolling && mIsScrollInfoLayer == aOther.mIsScrollInfoLayer; } + bool operator!=(const FrameMetrics& aOther) const { return !operator==(aOther); } bool IsDefault() const { FrameMetrics def; @@ -550,16 +557,21 @@ public: void SetIsScrollInfoLayer(bool aIsScrollInfoLayer) { mIsScrollInfoLayer = aIsScrollInfoLayer; } bool IsScrollInfoLayer() const { return mIsScrollInfoLayer; } private: + // A unique ID assigned to each scrollable frame. + ViewID mScrollId; + + // The ViewID of the scrollable frame to which overscroll should be handed off. + ViewID mScrollParentId; // The pres-shell resolution that has been induced on the document containing // this scroll frame as a result of zooming this scroll frame (whether via // user action, or choosing an initial zoom level on page load). This can // only be different from 1.0 for frames that are zoomable, which currently // is just the root content document's root scroll frame (mIsRoot = true). // This is a plain float rather than a ScaleFactor because in and of itself // it does not convert between any coordinate spaces for which we have names. @@ -629,28 +641,16 @@ private: // be refactored to be private. // The conversion factor between CSS pixels and device pixels for this frame. // This can vary based on a variety of things, such as reflowing-zoom. The // conversion factor for device pixels to layers pixels is just the // resolution. CSSToLayoutDeviceScale mDevPixelsPerCSSPixel; - // Whether or not this is the root scroll frame for the root content document. - bool mIsRootContent; - - // Whether or not this frame is for an element marked 'scrollgrab'. - bool mHasScrollgrab; - - // A unique ID assigned to each scrollable frame. - ViewID mScrollId; - - // The ViewID of the scrollable frame to which overscroll should be handed off. - ViewID mScrollParentId; - // The position of the top-left of the CSS viewport, relative to the document // (or the document relative to the viewport, if that helps understand it). // // Thus it is relative to the document. It is in the same coordinate space as // |mScrollableRect|, but a different coordinate space than |mViewport| and // |mDisplayPort|. // // It is required that the rect: @@ -664,38 +664,30 @@ private: CSSPoint mScrollOffset; // The "user zoom". Content is painted by gecko at mResolution * mDevPixelsPerCSSPixel, // but will be drawn to the screen at mZoom. In the steady state, the // two will be the same, but during an async zoom action the two may // diverge. This information is initialized in Gecko but updated in the APZC. CSSToParentLayerScale2D mZoom; - // Whether mScrollOffset was updated by something other than the APZ code, and - // if the APZC receiving this metrics should update its local copy. - bool mUpdateScrollOffset; // The scroll generation counter used to acknowledge the scroll offset update. uint32_t mScrollGeneration; - // When mDoSmoothScroll, the scroll offset should be animated to - // smoothly transition to mScrollOffset rather than be updated instantly. - bool mDoSmoothScroll; + // If mDoSmoothScroll is true, the scroll offset will be animated smoothly + // to this value. CSSPoint mSmoothScrollOffset; // The size of the root scrollable's composition bounds, but in local CSS pixels. CSSSize mRootCompositionSize; // A display port expressed as layer margins that apply to the rect of what // is drawn of the scrollable element. ScreenMargin mDisplayPortMargins; - // If this is true then we use the display port margins on this metrics, - // otherwise use the display port rect. - bool mUseDisplayPortMargins; - uint32_t mPresShellId; // The CSS viewport, which is the dimensions we're using to constrain the // <html> element of this frame, relative to the top-left of the layer. Note // that its offset is structured in such a way that it doesn't depend on the // method layout uses to scroll content. // // This is mainly useful on the root layer, however nested iframes can have @@ -717,27 +709,45 @@ private: nsCString mContentDescription; // The value of GetLineScrollAmount(), for scroll frames. LayoutDeviceIntSize mLineScrollAmount; // The value of GetPageScrollAmount(), for scroll frames. LayoutDeviceIntSize mPageScrollAmount; - // Whether or not the frame can be vertically scrolled with a mouse wheel. - bool mAllowVerticalScrollWithWheel; - // The clip rect to use when compositing a layer with this FrameMetrics. Maybe<ParentLayerIntRect> mClipRect; // An extra clip mask layer to use when compositing a layer with this // FrameMetrics. This is an index into the MetricsMaskLayers array on // the Layer. Maybe<size_t> mMaskLayerIndex; + // Whether or not this is the root scroll frame for the root content document. + bool mIsRootContent; + + // Whether or not this frame is for an element marked 'scrollgrab'. + bool mHasScrollgrab; + + // Whether mScrollOffset was updated by something other than the APZ code, and + // if the APZC receiving this metrics should update its local copy. + bool mUpdateScrollOffset; + + // When mDoSmoothScroll, the scroll offset should be animated to + // smoothly transition to mScrollOffset rather than be updated instantly. + bool mDoSmoothScroll; + + // If this is true then we use the display port margins on this metrics, + // otherwise use the display port rect. + bool mUseDisplayPortMargins; + + // Whether or not the frame can be vertically scrolled with a mouse wheel. + bool mAllowVerticalScrollWithWheel; + // Whether these framemetrics are for the root scroll frame (root element if // we don't have a root scroll frame) for its layers id. bool mIsLayersIdRoot; // True if scrolling using containers, false otherwise. This can be removed // when containerful scrolling is eliminated. bool mUsesContainerScrolling;