Bug 1386103 (part 0) - Don't pass lambdas to CreateOrRecycledMaskImageLayerFor. r=kats.

They cause inexplicable and monstrously complex compile errors in Android NDK
code in combination with the (entirely unrelated) changes in the next patch.
This commit is contained in:
Nicholas Nethercote 2017-08-10 16:02:01 +10:00
parent baaea4b6c0
commit 784f2b42d4

View File

@ -1289,7 +1289,7 @@ protected:
struct MaskLayerKey;
already_AddRefed<ImageLayer>
CreateOrRecycleMaskImageLayerFor(const MaskLayerKey& aKey,
const std::function<void(Layer* aLayer)>& aSetUserData);
void(*aSetUserData)(Layer* aLayer));
/**
* Grabs all PaintedLayers and ColorLayers from the ContainerLayer and makes them
* available for recycling.
@ -2216,7 +2216,7 @@ ContainerState::CreateOrRecycleImageLayer(PaintedLayer *aPainted)
already_AddRefed<ImageLayer>
ContainerState::CreateOrRecycleMaskImageLayerFor(const MaskLayerKey& aKey,
const std::function<void(Layer* aLayer)>& aSetUserData)
void(*aSetUserData)(Layer* aLayer))
{
RefPtr<ImageLayer> result = mRecycledMaskImageLayers.Get(aKey);
if (result) {
@ -3877,6 +3877,13 @@ GetASRForPerspective(const ActiveScrolledRoot* aASR, nsIFrame* aPerspectiveFrame
return nullptr;
}
void
SetCSSMaskLayerUserData(Layer* aMaskLayer)
{
aMaskLayer->SetUserData(&gCSSMaskLayerUserData,
new CSSMaskLayerUserData());
}
void
ContainerState::SetupMaskLayerForCSSMask(Layer* aLayer,
nsDisplayMask* aMaskItem)
@ -3885,12 +3892,7 @@ ContainerState::SetupMaskLayerForCSSMask(Layer* aLayer,
RefPtr<ImageLayer> maskLayer =
CreateOrRecycleMaskImageLayerFor(MaskLayerKey(aLayer, Nothing()),
[](Layer* aMaskLayer)
{
aMaskLayer->SetUserData(&gCSSMaskLayerUserData,
new CSSMaskLayerUserData());
}
);
SetCSSMaskLayerUserData);
CSSMaskLayerUserData* oldUserData =
static_cast<CSSMaskLayerUserData*>(maskLayer->GetUserData(&gCSSMaskLayerUserData));
@ -6385,6 +6387,13 @@ ContainerState::SetupMaskLayer(Layer *aLayer,
SetClipCount(paintedData, aRoundedRectClipCount);
}
void
SetMaskLayerUserData(Layer* aMaskLayer)
{
aMaskLayer->SetUserData(&gMaskLayerUserData,
new MaskLayerUserData());
}
already_AddRefed<Layer>
ContainerState::CreateMaskLayer(Layer *aLayer,
const DisplayItemClip& aClip,
@ -6401,13 +6410,7 @@ ContainerState::CreateMaskLayer(Layer *aLayer,
// check if we can re-use the mask layer
MaskLayerKey recycleKey(aLayer, aForAncestorMaskLayer);
RefPtr<ImageLayer> maskLayer =
CreateOrRecycleMaskImageLayerFor(recycleKey,
[](Layer* aMaskLayer)
{
aMaskLayer->SetUserData(&gMaskLayerUserData,
new MaskLayerUserData());
}
);
CreateOrRecycleMaskImageLayerFor(recycleKey, SetMaskLayerUserData);
MaskLayerUserData* userData = GetMaskLayerUserData(maskLayer);
int32_t A2D = mContainerFrame->PresContext()->AppUnitsPerDevPixel();