зеркало из https://github.com/mozilla/gecko-dev.git
Bug 803826 - Restore the layer builder pointer on return from PaintForFrame. r=mattwoodrow
It's possible for nsDisplayList::PaintForFrame to reset the layer builder pointer on a layer manager it didn't create. Instead of setting it to null, store the existing pointer and restore it on return.
This commit is contained in:
Родитель
def7614df5
Коммит
0d4c256f4e
|
@ -1014,6 +1014,9 @@ void nsDisplayList::PaintForFrame(nsDisplayListBuilder* aBuilder,
|
|||
layerManager = new BasicLayerManager();
|
||||
}
|
||||
|
||||
// Store the existing layer builder to reinstate it on return.
|
||||
FrameLayerBuilder *oldBuilder = layerManager->GetLayerBuilder();
|
||||
|
||||
FrameLayerBuilder *layerBuilder = new FrameLayerBuilder();
|
||||
layerBuilder->Init(aBuilder, layerManager);
|
||||
|
||||
|
@ -1056,7 +1059,7 @@ void nsDisplayList::PaintForFrame(nsDisplayListBuilder* aBuilder,
|
|||
}
|
||||
|
||||
if (!root) {
|
||||
layerManager->RemoveUserData(&gLayerManagerLayerBuilder);
|
||||
layerManager->SetUserData(&gLayerManagerLayerBuilder, oldBuilder);
|
||||
return;
|
||||
}
|
||||
// Root is being scaled up by the X/Y resolution. Scale it back down.
|
||||
|
@ -1135,7 +1138,7 @@ void nsDisplayList::PaintForFrame(nsDisplayListBuilder* aBuilder,
|
|||
}
|
||||
|
||||
nsCSSRendering::DidPaint();
|
||||
layerManager->RemoveUserData(&gLayerManagerLayerBuilder);
|
||||
layerManager->SetUserData(&gLayerManagerLayerBuilder, oldBuilder);
|
||||
}
|
||||
|
||||
uint32_t nsDisplayList::Count() const {
|
||||
|
|
Загрузка…
Ссылка в новой задаче