--- 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;