/* static */ void ActiveLayerTracker::NotifyOffsetRestyle(nsIFrame* aFrame) { LayerActivity* layerActivity = GetLayerActivityForUpdate(aFrame); IncrementMutationCount(&layerActivity->mLeftRestyleCount); IncrementMutationCount(&layerActivity->mTopRestyleCount); IncrementMutationCount(&layerActivity->mRightRestyleCount); IncrementMutationCount(&layerActivity->mBottomRestyleCount); }
/* static */ void ActiveLayerTracker::NotifyOffsetRestyle(nsIFrame* aFrame) { LayerActivity* layerActivity = GetLayerActivityForUpdate(aFrame); IncrementMutationCount(&layerActivity->mRestyleCounts[LayerActivity::ACTIVITY_LEFT]); IncrementMutationCount(&layerActivity->mRestyleCounts[LayerActivity::ACTIVITY_TOP]); IncrementMutationCount(&layerActivity->mRestyleCounts[LayerActivity::ACTIVITY_RIGHT]); IncrementMutationCount(&layerActivity->mRestyleCounts[LayerActivity::ACTIVITY_BOTTOM]); }
/* static */ void ActiveLayerTracker::NotifyRestyle(nsIFrame* aFrame, nsCSSProperty aProperty) { LayerActivity* layerActivity = GetLayerActivityForUpdate(aFrame); uint8_t& mutationCount = layerActivity->RestyleCountForProperty(aProperty); IncrementMutationCount(&mutationCount); }
/* static */ void ActiveLayerTracker::NotifyRestyle(nsIFrame* aFrame, nsCSSProperty aProperty) { LayerActivity* layerActivity = GetLayerActivityForUpdate(aFrame); uint8_t& mutationCount = layerActivity->RestyleCountForProperty(aProperty); IncrementMutationCount(&mutationCount); if (aProperty == eCSSProperty_transform) { IncrementScaleRestyleCountIfNeeded(aFrame, layerActivity); } }
static void IncrementScaleRestyleCountIfNeeded(nsIFrame* aFrame, LayerActivity* aActivity) { const nsStyleDisplay* display = aFrame->StyleDisplay(); if (!display->mSpecifiedTransform) { // The transform was removed. aActivity->mPreviousTransformScale = Nothing(); IncrementMutationCount(&aActivity->mScaleRestyleCount); return; } // Compute the new scale due to the CSS transform property. nsPresContext* presContext = aFrame->PresContext(); RuleNodeCacheConditions dummy; nsStyleTransformMatrix::TransformReferenceBox refBox(aFrame); Matrix4x4 transform = nsStyleTransformMatrix::ReadTransforms(display->mSpecifiedTransform->mHead, aFrame->StyleContext(), presContext, dummy, refBox, presContext->AppUnitsPerCSSPixel()); Matrix transform2D; if (!transform.Is2D(&transform2D)) { // We don't attempt to handle 3D transforms; just assume the scale changed. aActivity->mPreviousTransformScale = Nothing(); IncrementMutationCount(&aActivity->mScaleRestyleCount); return; } gfxSize scale = ThebesMatrix(transform2D).ScaleFactors(true); if (aActivity->mPreviousTransformScale == Some(scale)) { return; // Nothing changed. } aActivity->mPreviousTransformScale = Some(scale); IncrementMutationCount(&aActivity->mScaleRestyleCount); }