Bug 869133 - Recycle the ImageLayers created by nsDisplayImage/nsDisplayBackgroundImage instead of recreating them each time. r=roc

This commit is contained in:
Matt Woodrow 2013-05-30 14:42:28 +12:00
parent 25b95a3d76
commit 7d4cb174a7
2 changed files with 14 additions and 2 deletions

View File

@ -1880,7 +1880,13 @@ nsDisplayBackgroundImage::BuildLayer(nsDisplayListBuilder* aBuilder,
LayerManager* aManager,
const ContainerParameters& aParameters)
{
nsRefPtr<ImageLayer> layer = aManager->CreateImageLayer();
nsRefPtr<ImageLayer> layer = static_cast<ImageLayer*>
(aManager->GetLayerBuilder()->GetLeafLayerFor(aBuilder, this));
if (!layer) {
layer = aManager->CreateImageLayer();
if (!layer)
return nullptr;
}
layer->SetContainer(mImageContainer);
ConfigureLayer(layer, aParameters.mOffset);
return layer.forget();

View File

@ -1307,7 +1307,13 @@ nsDisplayImage::BuildLayer(nsDisplayListBuilder* aBuilder,
nsresult rv = mImage->GetImageContainer(aManager, getter_AddRefs(container));
NS_ENSURE_SUCCESS(rv, nullptr);
nsRefPtr<ImageLayer> layer = aManager->CreateImageLayer();
nsRefPtr<ImageLayer> layer = static_cast<ImageLayer*>
(aManager->GetLayerBuilder()->GetLeafLayerFor(aBuilder, this));
if (!layer) {
layer = aManager->CreateImageLayer();
if (!layer)
return nullptr;
}
layer->SetContainer(container);
ConfigureLayer(layer, aParameters.mOffset);
return layer.forget();