ContainerLayerProperties(ContainerLayer* aLayer)
     : LayerPropertiesBase(aLayer)
 {
     for (Layer* child = aLayer->GetFirstChild(); child; child = child->GetNextSibling()) {
         mChildren.AppendElement(CloneLayerTreePropertiesInternal(child));
     }
 }
 explicit ContainerLayerProperties(ContainerLayer* aLayer)
   : LayerPropertiesBase(aLayer)
   , mPreXScale(aLayer->GetPreXScale())
   , mPreYScale(aLayer->GetPreYScale())
 {
   for (Layer* child = aLayer->GetFirstChild(); child; child = child->GetNextSibling()) {
     mChildren.AppendElement(Move(CloneLayerTreePropertiesInternal(child)));
   }
 }
 LayerPropertiesBase(Layer* aLayer)
     : mLayer(aLayer)
     , mMaskLayer(nsnull)
     , mVisibleBounds(aLayer->GetVisibleRegion().GetBounds())
     , mTransform(aLayer->GetTransform())
     , mOpacity(aLayer->GetOpacity())
     , mUseClipRect(!!aLayer->GetClipRect())
 {
     MOZ_COUNT_CTOR(LayerPropertiesBase);
     if (aLayer->GetMaskLayer()) {
         mMaskLayer = CloneLayerTreePropertiesInternal(aLayer->GetMaskLayer());
     }
     if (mUseClipRect) {
         mClipRect = *aLayer->GetClipRect();
     }
 }
 explicit LayerPropertiesBase(Layer* aLayer)
   : mLayer(aLayer)
   , mMaskLayer(nullptr)
   , mVisibleRegion(aLayer->GetVisibleRegion())
   , mInvalidRegion(aLayer->GetInvalidRegion())
   , mPostXScale(aLayer->GetPostXScale())
   , mPostYScale(aLayer->GetPostYScale())
   , mOpacity(aLayer->GetLocalOpacity())
   , mUseClipRect(!!aLayer->GetClipRect())
 {
   MOZ_COUNT_CTOR(LayerPropertiesBase);
   if (aLayer->GetMaskLayer()) {
     mMaskLayer = CloneLayerTreePropertiesInternal(aLayer->GetMaskLayer(), true);
   }
   if (mUseClipRect) {
     mClipRect = *aLayer->GetClipRect();
   }
   mTransform = aLayer->GetLocalTransform();
 }
/* static */ LayerProperties*
LayerProperties::CloneFrom(Layer* aRoot)
{
    return CloneLayerTreePropertiesInternal(aRoot);
}
/* static */ UniquePtr<LayerProperties>
LayerProperties::CloneFrom(Layer* aRoot)
{
  return CloneLayerTreePropertiesInternal(aRoot);
}