mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Remove unnecessary Lock() calls from BasicCompositor (bug 942318, r=mattwoodrow).
This commit is contained in:
parent
5d9eb4fc08
commit
00687a381b
@ -104,40 +104,30 @@ protected:
|
||||
nsIntPoint*) MOZ_OVERRIDE
|
||||
{
|
||||
AutoOpenSurface surf(OPEN_READ_ONLY, aImage);
|
||||
mThebesSurface = ShadowLayerForwarder::OpenDescriptor(OPEN_READ_ONLY, aImage);
|
||||
mThebesImage = mThebesSurface->GetAsImageSurface();
|
||||
MOZ_ASSERT(mThebesImage);
|
||||
mFormat = ImageFormatToSurfaceFormat(mThebesImage->Format());
|
||||
mSurface = nullptr;
|
||||
mSize = IntSize(mThebesImage->Width(), mThebesImage->Height());
|
||||
nsRefPtr<gfxASurface> surface = ShadowLayerForwarder::OpenDescriptor(OPEN_READ_ONLY, aImage);
|
||||
nsRefPtr<gfxImageSurface> image = surface->GetAsImageSurface();
|
||||
mFormat = ImageFormatToSurfaceFormat(image->Format());
|
||||
mSize = IntSize(image->Width(), image->Height());
|
||||
mSurface = Factory::CreateWrappingDataSourceSurface(image->Data(),
|
||||
image->Stride(),
|
||||
mSize,
|
||||
mFormat);
|
||||
}
|
||||
|
||||
virtual void EnsureSurface() { }
|
||||
|
||||
virtual bool Lock() MOZ_OVERRIDE
|
||||
{
|
||||
EnsureSurface();
|
||||
if (!mSurface) {
|
||||
mSurface = Factory::CreateWrappingDataSourceSurface(mThebesImage->Data(),
|
||||
mThebesImage->Stride(),
|
||||
mSize,
|
||||
mFormat);
|
||||
}
|
||||
virtual bool EnsureSurface() {
|
||||
return true;
|
||||
}
|
||||
|
||||
virtual bool Lock() MOZ_OVERRIDE {
|
||||
return EnsureSurface();
|
||||
}
|
||||
|
||||
virtual already_AddRefed<gfxImageSurface> GetAsSurface() MOZ_OVERRIDE {
|
||||
if (!mThebesImage) {
|
||||
mThebesImage = mThebesSurface->GetAsImageSurface();
|
||||
}
|
||||
nsRefPtr<gfxImageSurface> result = mThebesImage;
|
||||
return result.forget();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
BasicCompositor *mCompositor;
|
||||
RefPtr<SourceSurface> mSurface;
|
||||
nsRefPtr<gfxImageSurface> mThebesImage;
|
||||
nsRefPtr<gfxASurface> mThebesSurface;
|
||||
IntSize mSize;
|
||||
SurfaceFormat mFormat;
|
||||
};
|
||||
@ -174,15 +164,18 @@ public:
|
||||
mSurface = nullptr;
|
||||
}
|
||||
|
||||
virtual void EnsureSurface() MOZ_OVERRIDE
|
||||
virtual bool EnsureSurface() MOZ_OVERRIDE
|
||||
{
|
||||
if (!mBuffer) {
|
||||
return;
|
||||
if (mSurface) {
|
||||
return true;
|
||||
}
|
||||
ConvertImageToRGB(*mBuffer);
|
||||
if (!mBuffer) {
|
||||
return false;
|
||||
}
|
||||
return ConvertImageToRGB(*mBuffer);
|
||||
}
|
||||
|
||||
void ConvertImageToRGB(const SurfaceDescriptor& aImage)
|
||||
bool ConvertImageToRGB(const SurfaceDescriptor& aImage)
|
||||
{
|
||||
YCbCrImageDataDeserializer deserializer(aImage.get_YCbCrImage().data().get<uint8_t>());
|
||||
PlanarYCbCrData data;
|
||||
@ -194,22 +187,22 @@ public:
|
||||
if (size.width > PlanarYCbCrImage::MAX_DIMENSION ||
|
||||
size.height > PlanarYCbCrImage::MAX_DIMENSION) {
|
||||
NS_ERROR("Illegal image dest width or height");
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
mThebesSurface = mThebesImage =
|
||||
new gfxImageSurface(size, format);
|
||||
mSize = ToIntSize(size);
|
||||
mFormat = (format == gfxImageFormatRGB24)
|
||||
? FORMAT_B8G8R8X8
|
||||
: FORMAT_B8G8R8A8;
|
||||
|
||||
RefPtr<DataSourceSurface> surface = Factory::CreateDataSourceSurface(mSize, mFormat);
|
||||
gfxUtils::ConvertYCbCrToRGB(data, format, size,
|
||||
mThebesImage->Data(),
|
||||
mThebesImage->Stride());
|
||||
surface->GetData(),
|
||||
surface->Stride());
|
||||
|
||||
mSize = IntSize(size.width, size.height);
|
||||
mFormat =
|
||||
(format == gfxImageFormatARGB32) ? FORMAT_B8G8R8A8 :
|
||||
FORMAT_B8G8R8X8;
|
||||
mSurface = surface;
|
||||
return true;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
TemporaryRef<DeprecatedTextureHost>
|
||||
@ -466,7 +459,6 @@ BasicCompositor::DrawQuad(const gfx::Rect& aRect,
|
||||
Matrix maskTransform;
|
||||
if (aEffectChain.mSecondaryEffects[EFFECT_MASK]) {
|
||||
EffectMask *effectMask = static_cast<EffectMask*>(aEffectChain.mSecondaryEffects[EFFECT_MASK].get());
|
||||
static_cast<DeprecatedTextureHost*>(effectMask->mMaskTexture)->Lock();
|
||||
sourceMask = effectMask->mMaskTexture->AsSourceBasic()->GetSurface();
|
||||
MOZ_ASSERT(effectMask->mMaskTransform.Is2D(), "How did we end up with a 3D transform here?!");
|
||||
MOZ_ASSERT(!effectMask->mIs3D);
|
||||
@ -540,11 +532,6 @@ BasicCompositor::DrawQuad(const gfx::Rect& aRect,
|
||||
buffer->DrawSurface(temp, transformBounds, transformBounds);
|
||||
}
|
||||
|
||||
if (aEffectChain.mSecondaryEffects[EFFECT_MASK]) {
|
||||
EffectMask *effectMask = static_cast<EffectMask*>(aEffectChain.mSecondaryEffects[EFFECT_MASK].get());
|
||||
static_cast<DeprecatedTextureHost*>(effectMask->mMaskTexture)->Unlock();
|
||||
}
|
||||
|
||||
buffer->PopClip();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user