static LayerActivity* GetLayerActivity(nsIFrame* aFrame) { if (!aFrame->HasAnyStateBits(NS_FRAME_HAS_LAYER_ACTIVITY_PROPERTY)) { return nullptr; } FrameProperties properties = aFrame->Properties(); return static_cast<LayerActivity*>(properties.Get(LayerActivityProperty())); }
static LayerActivity* GetLayerActivityForUpdate(nsIFrame* aFrame) { FrameProperties properties = aFrame->Properties(); LayerActivity* layerActivity = static_cast<LayerActivity*>(properties.Get(LayerActivityProperty())); if (layerActivity) { gLayerActivityTracker->MarkUsed(layerActivity); } else { if (!gLayerActivityTracker) { gLayerActivityTracker = new LayerActivityTracker(); } layerActivity = new LayerActivity(aFrame); gLayerActivityTracker->AddObject(layerActivity); aFrame->AddStateBits(NS_FRAME_HAS_LAYER_ACTIVITY_PROPERTY); properties.Set(LayerActivityProperty(), layerActivity); } return layerActivity; }
/* static */ void ActiveLayerTracker::TransferActivityToFrame(nsIContent* aContent, nsIFrame* aFrame) { LayerActivity* layerActivity = static_cast<LayerActivity*>( aContent->UnsetProperty(nsGkAtoms::LayerActivity)); if (!layerActivity) { return; } layerActivity->mContent = nullptr; layerActivity->mFrame = aFrame; aFrame->AddStateBits(NS_FRAME_HAS_LAYER_ACTIVITY_PROPERTY); aFrame->Properties().Set(LayerActivityProperty(), layerActivity); }
/* static */ void ActiveLayerTracker::TransferActivityToContent(nsIFrame* aFrame, nsIContent* aContent) { if (!aFrame->HasAnyStateBits(NS_FRAME_HAS_LAYER_ACTIVITY_PROPERTY)) { return; } FrameProperties properties = aFrame->Properties(); LayerActivity* layerActivity = properties.Remove(LayerActivityProperty()); aFrame->RemoveStateBits(NS_FRAME_HAS_LAYER_ACTIVITY_PROPERTY); if (!layerActivity) { return; } layerActivity->mFrame = nullptr; layerActivity->mContent = aContent; aContent->SetProperty(nsGkAtoms::LayerActivity, layerActivity, nsINode::DeleteProperty<LayerActivity>, true); }