author | Kartikaya Gupta <kgupta@mozilla.com> |
Tue, 05 Jan 2016 14:25:06 -0500 | |
changeset 319103 | 7af91f43e3e03a73bfd87e104c896af754dbf3ee |
parent 319102 | 37eae576ed49a330c6bacbe5077c8d1d148ee9ae |
child 512537 | 47e042cf2110bc1e15403b9404df1cfc102cc42b |
push id | 8968 |
push user | kgupta@mozilla.com |
push date | Tue, 05 Jan 2016 19:25:33 +0000 |
reviewers | botond |
bugs | 1219352 |
milestone | 46.0a1 |
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 @@ -724,16 +724,30 @@ struct ParamTraits<mozilla::layers::Fram nsCString str; if (!ReadParam(aMsg, aIter, &str)) { return false; } aResult->SetContentDescription(str); return true; } + // We need this helper because we can't get the address of a bitfield to + // pass directly to ReadParam. So instead we read it into a temporary bool + // and set the bitfield using a setter function + static bool ReadBoolForBitfield(const Message* aMsg, void** aIter, + paramType* aResult, void (paramType::*aSetter)(bool)) + { + bool value; + if (ReadParam(aMsg, aIter, &value)) { + (aResult->*aSetter)(value); + return true; + } + return false; + } + static bool Read(const Message* aMsg, void** aIter, paramType* aResult) { 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) && @@ -750,25 +764,25 @@ struct ParamTraits<mozilla::layers::Fram 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->mDoSmoothScroll) && - ReadParam(aMsg, aIter, &aResult->mUseDisplayPortMargins) && - ReadParam(aMsg, aIter, &aResult->mAllowVerticalScrollWithWheel) && - ReadParam(aMsg, aIter, &aResult->mIsLayersIdRoot) && - ReadParam(aMsg, aIter, &aResult->mUsesContainerScrolling) && - ReadParam(aMsg, aIter, &aResult->mIsScrollInfoLayer)); + ReadBoolForBitfield(aMsg, aIter, aResult, ¶mType::SetIsRootContent) && + ReadBoolForBitfield(aMsg, aIter, aResult, ¶mType::SetHasScrollgrab) && + ReadBoolForBitfield(aMsg, aIter, aResult, ¶mType::SetUpdateScrollOffset) && + ReadBoolForBitfield(aMsg, aIter, aResult, ¶mType::SetDoSmoothScroll) && + ReadBoolForBitfield(aMsg, aIter, aResult, ¶mType::SetUseDisplayPortMargins) && + ReadBoolForBitfield(aMsg, aIter, aResult, ¶mType::SetAllowVerticalScrollWithWheel) && + ReadBoolForBitfield(aMsg, aIter, aResult, ¶mType::SetIsLayersIdRoot) && + ReadBoolForBitfield(aMsg, aIter, aResult, ¶mType::SetUsesContainerScrolling) && + ReadBoolForBitfield(aMsg, aIter, aResult, ¶mType::SetIsScrollInfoLayer)); } }; template<> struct ParamTraits<mozilla::layers::TextureFactoryIdentifier> { typedef mozilla::layers::TextureFactoryIdentifier paramType;
--- a/gfx/layers/FrameMetrics.h +++ b/gfx/layers/FrameMetrics.h @@ -718,56 +718,65 @@ private: 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; + bool mIsRootContent:1; // Whether or not this frame is for an element marked 'scrollgrab'. - bool mHasScrollgrab; + bool mHasScrollgrab:1; // 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; + bool mUpdateScrollOffset:1; // When mDoSmoothScroll, the scroll offset should be animated to // smoothly transition to mScrollOffset rather than be updated instantly. - bool mDoSmoothScroll; + bool mDoSmoothScroll:1; // If this is true then we use the display port margins on this metrics, // otherwise use the display port rect. - bool mUseDisplayPortMargins; + bool mUseDisplayPortMargins:1; // Whether or not the frame can be vertically scrolled with a mouse wheel. - bool mAllowVerticalScrollWithWheel; + bool mAllowVerticalScrollWithWheel:1; // 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; + bool mIsLayersIdRoot:1; // True if scrolling using containers, false otherwise. This can be removed // when containerful scrolling is eliminated. - bool mUsesContainerScrolling; + bool mUsesContainerScrolling:1; // Whether or not this frame has a "scroll info layer" to capture events. - bool mIsScrollInfoLayer; + bool mIsScrollInfoLayer:1; // WARNING!!!! // // When adding new fields to FrameMetrics, the following places should be // updated to include them (as needed): // FrameMetrics::operator == // AsyncPanZoomController::NotifyLayersUpdated // The ParamTraits specialization in GfxMessageUtils.h // // Please add new fields above this comment. + + + // Private helpers for IPC purposes + void SetUpdateScrollOffset(bool aValue) { + mUpdateScrollOffset = aValue; + } + void SetDoSmoothScroll(bool aValue) { + mDoSmoothScroll = aValue; + } }; /** * This class allows us to uniquely identify a scrollable layer. The * mLayersId identifies the layer tree (corresponding to a child process * and/or tab) that the scrollable layer belongs to. The mPresShellId * is a temporal identifier (corresponding to the document loaded that * contains the scrollable layer, which may change over time). The