Backed out changeset bb80c2b08bc0 (
bug 1076695) for being the likely cause of the ASAN reftest permafail
--- a/gfx/2d/FilterNodeSoftware.cpp
+++ b/gfx/2d/FilterNodeSoftware.cpp
@@ -1151,51 +1151,41 @@ FilterNodeTransformSoftware::SourceRectF
}
TemporaryRef<DataSourceSurface>
FilterNodeTransformSoftware::Render(const IntRect& aRect)
{
IntRect srcRect = SourceRectForOutputRect(aRect);
RefPtr<DataSourceSurface> input =
- GetInputDataSourceSurface(IN_TRANSFORM_IN, srcRect);
+ GetInputDataSourceSurface(IN_TRANSFORM_IN, srcRect, NEED_COLOR_CHANNELS);
if (!input) {
return nullptr;
}
Matrix transform = Matrix::Translation(srcRect.x, srcRect.y) * mMatrix *
Matrix::Translation(-aRect.x, -aRect.y);
if (transform.IsIdentity() && srcRect.Size() == aRect.Size()) {
return input.forget();
}
- RefPtr<DataSourceSurface> surf =
- Factory::CreateDataSourceSurface(aRect.Size(), input->GetFormat());
-
- DataSourceSurface::MappedSurface mapping;
- surf->Map(DataSourceSurface::MapType::WRITE, &mapping);
-
RefPtr<DrawTarget> dt =
- Factory::CreateDrawTargetForData(BackendType::CAIRO,
- mapping.mData,
- surf->GetSize(),
- mapping.mStride,
- surf->GetFormat());
+ Factory::CreateDrawTarget(BackendType::CAIRO, aRect.Size(), input->GetFormat());
if (!dt) {
return nullptr;
}
Rect r(0, 0, srcRect.width, srcRect.height);
dt->SetTransform(transform);
dt->DrawSurface(input, r, r, DrawSurfaceOptions(mFilter));
- dt->Flush();
- surf->Unmap();
- return surf.forget();
+ RefPtr<SourceSurface> result = dt->Snapshot();
+ RefPtr<DataSourceSurface> resultData = result->GetDataSurface();
+ return resultData.forget();
}
void
FilterNodeTransformSoftware::RequestFromInputsForRect(const IntRect &aRect)
{
RequestInputRect(IN_TRANSFORM_IN, SourceRectForOutputRect(aRect));
}