Skip to content

Commit

Permalink
SkiaSharp updates, SkiaSharp 3.0 render tests enabled (#15255)
Browse files Browse the repository at this point in the history
* Use 2.88.8-preview.1.1 skiasharp

* Use SKImageFilter directly, as we don't need compat anymore

* Add SkiaSharp 3 render tests

* Enable SkiaSharp 3 tests on CI

* Add IncludeLinuxSkia in Skia tests

* Update Skia version, remove SkiaCompat

* Remove Skia3 test project, reuse single Skia render test project, so they won't conflict
  • Loading branch information
maxkatz6 authored Apr 20, 2024
1 parent 85a48de commit 8c7754f
Show file tree
Hide file tree
Showing 16 changed files with 43 additions and 159 deletions.
6 changes: 3 additions & 3 deletions build/HarfBuzzSharp.props
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<PackageReference Include="HarfBuzzSharp" Version="7.3.0" />
<PackageReference Condition="'$(IncludeLinuxSkia)' == 'true'" Include="HarfBuzzSharp.NativeAssets.Linux" Version="7.3.0" />
<PackageReference Condition="'$(IncludeWasmSkia)' == 'true'" Include="HarfBuzzSharp.NativeAssets.WebAssembly" Version="7.3.0" />
<PackageReference Include="HarfBuzzSharp" Version="7.3.0.2" />
<PackageReference Condition="'$(IncludeLinuxSkia)' == 'true'" Include="HarfBuzzSharp.NativeAssets.Linux" Version="7.3.0.2" />
<PackageReference Condition="'$(IncludeWasmSkia)' == 'true'" Include="HarfBuzzSharp.NativeAssets.WebAssembly" Version="7.3.0.2" />
</ItemGroup>
</Project>
13 changes: 9 additions & 4 deletions build/SkiaSharp.props
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<PackageReference Include="SkiaSharp" Version="2.88.7" />
<PackageReference Condition="'$(IncludeLinuxSkia)' == 'true'" Include="SkiaSharp.NativeAssets.Linux" Version="2.88.7" />
<PackageReference Condition="'$(IncludeWasmSkia)' == 'true'" Include="SkiaSharp.NativeAssets.WebAssembly" Version="2.88.7" />
<ItemGroup Condition="'$(AvsIncludeSkiaSharp3)' != 'true'">
<PackageReference Include="SkiaSharp" Version="2.88.8" />
<PackageReference Condition="'$(IncludeLinuxSkia)' == 'true'" Include="SkiaSharp.NativeAssets.Linux" Version="2.88.8" />
<PackageReference Condition="'$(IncludeWasmSkia)' == 'true'" Include="SkiaSharp.NativeAssets.WebAssembly" Version="2.88.8" />
</ItemGroup>
<ItemGroup Condition="'$(AvsIncludeSkiaSharp3)' == 'true'">
<PackageReference Include="SkiaSharp" Version="3.0.0-preview.3.1" />
<PackageReference Condition="'$(IncludeLinuxSkia)' == 'true'" Include="SkiaSharp.NativeAssets.Linux" Version="3.0.0-preview.3.1" />
<PackageReference Condition="'$(IncludeWasmSkia)' == 'true'" Include="SkiaSharp.NativeAssets.WebAssembly" Version="3.0.0-preview.3.1" />
</ItemGroup>
</Project>
1 change: 1 addition & 0 deletions src/Avalonia.Base/Avalonia.Base.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
<InternalsVisibleTo Include="Avalonia.Markup.UnitTests, PublicKey=$(AvaloniaPublicKey)" />
<InternalsVisibleTo Include="Avalonia.Markup.Xaml.UnitTests, PublicKey=$(AvaloniaPublicKey)" />
<InternalsVisibleTo Include="Avalonia.Skia.RenderTests, PublicKey=$(AvaloniaPublicKey)" />
<InternalsVisibleTo Include="Avalonia.Skia3.RenderTests, PublicKey=$(AvaloniaPublicKey)" />
<InternalsVisibleTo Include="Avalonia.Skia.UnitTests, PublicKey=$(AvaloniaPublicKey)" />
<InternalsVisibleTo Include="Avalonia.UnitTests, PublicKey=$(AvaloniaPublicKey)" />
<InternalsVisibleTo Include="Avalonia.Win32, PublicKey=$(AvaloniaPublicKey)" />
Expand Down
1 change: 1 addition & 0 deletions src/Avalonia.Controls/Avalonia.Controls.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
<InternalsVisibleTo Include="Avalonia.Controls.ItemsRepeater, PublicKey=$(AvaloniaPublicKey)" />
<InternalsVisibleTo Include="Avalonia.UnitTests, PublicKey=$(AvaloniaPublicKey)" />
<InternalsVisibleTo Include="Avalonia.Skia.RenderTests, PublicKey=$(AvaloniaPublicKey)" />
<InternalsVisibleTo Include="Avalonia.Skia3.RenderTests, PublicKey=$(AvaloniaPublicKey)" />
<InternalsVisibleTo Include="Avalonia.Base.UnitTests, PublicKey=$(AvaloniaPublicKey)" />
<InternalsVisibleTo Include="Avalonia.Controls.UnitTests, PublicKey=$(AvaloniaPublicKey)" />
<InternalsVisibleTo Include="Avalonia.Markup.UnitTests, PublicKey=$(AvaloniaPublicKey)" />
Expand Down
1 change: 1 addition & 0 deletions src/Skia/Avalonia.Skia/Avalonia.Skia.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

<ItemGroup Label="InternalsVisibleTo">
<InternalsVisibleTo Include="Avalonia.Skia.RenderTests, PublicKey=$(AvaloniaPublicKey)" />
<InternalsVisibleTo Include="Avalonia.Skia3.RenderTests, PublicKey=$(AvaloniaPublicKey)" />
<InternalsVisibleTo Include="Avalonia.Skia.UnitTests, PublicKey=$(AvaloniaPublicKey)" />
<InternalsVisibleTo Include="Avalonia.Benchmarks, PublicKey=$(AvaloniaPublicKey)" />
</ItemGroup>
Expand Down
34 changes: 0 additions & 34 deletions src/Skia/Avalonia.Skia/Compatibility/SkiaCompat.SKCanvas.cs

This file was deleted.

57 changes: 0 additions & 57 deletions src/Skia/Avalonia.Skia/Compatibility/SkiaCompat.SKImageFilter.cs

This file was deleted.

32 changes: 0 additions & 32 deletions src/Skia/Avalonia.Skia/Compatibility/SkiaCompat.SKPath.cs

This file was deleted.

16 changes: 0 additions & 16 deletions src/Skia/Avalonia.Skia/Compatibility/SkiaCompat.cs

This file was deleted.

6 changes: 3 additions & 3 deletions src/Skia/Avalonia.Skia/DrawingContextImpl.Effects.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public void PopEffect()
if (blur.Radius <= 0)
return null;
var sigma = SkBlurRadiusToSigma(blur.Radius);
return SkiaCompat.CreateBlur(sigma, sigma);
return SKImageFilter.CreateBlur(sigma, sigma);
}

if (effect is IDropShadowEffect drop)
Expand All @@ -41,10 +41,10 @@ public void PopEffect()
alpha *= _currentOpacity;
var color = new SKColor(drop.Color.R, drop.Color.G, drop.Color.B, (byte)Math.Max(0, Math.Min(255, alpha)));

return SkiaCompat.CreateDropShadow((float)drop.OffsetX, (float)drop.OffsetY, sigma, sigma, color);
return SKImageFilter.CreateDropShadow((float)drop.OffsetX, (float)drop.OffsetY, sigma, sigma, color);
}

return null;
}

}
}
6 changes: 3 additions & 3 deletions src/Skia/Avalonia.Skia/DrawingContextImpl.cs
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ public void Dispose()
{
if (!_isDisposed)
{
SkiaCompat.SetMatrix(_context.Canvas, _revertTransform);
_context.Canvas.SetMatrix(_revertTransform);
_context._leased = false;
_isDisposed = true;
}
Expand Down Expand Up @@ -328,7 +328,7 @@ public static BoxShadowFilter Create(SKPaint paint, BoxShadow shadow, double opa
{
var ac = shadow.Color;

var filter = SkiaCompat.CreateBlur(SkBlurRadiusToSigma(shadow.Blur), SkBlurRadiusToSigma(shadow.Blur));
var filter = SKImageFilter.CreateBlur(SkBlurRadiusToSigma(shadow.Blur), SkBlurRadiusToSigma(shadow.Blur));
var color = new SKColor(ac.R, ac.G, ac.B, (byte)(ac.A * opacity));

paint.Reset();
Expand Down Expand Up @@ -860,7 +860,7 @@ public Matrix Transform
transform *= _postTransform.Value;
}

SkiaCompat.SetMatrix(Canvas, transform.ToSKMatrix());
Canvas.SetMatrix(transform.ToSKMatrix());
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/Skia/Avalonia.Skia/GlyphRunImpl.cs
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ public SKTextBlob GetTextBlob(RenderOptions renderOptions)
runBuffer.SetPositions(_glyphPositions);
runBuffer.SetGlyphs(_glyphIndices);

var textBlob = builder.Build();
var textBlob = builder.Build()!;

SKTextBlobBuilderCache.Shared.Return(builder);

Expand Down
2 changes: 1 addition & 1 deletion src/Skia/Avalonia.Skia/SurfaceRenderTarget.cs
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ public void Blit(IDrawingContextImpl contextImpl)
var oldMatrix = context.Canvas.TotalMatrix;
context.Canvas.ResetMatrix();
_surface.Surface.Draw(context.Canvas, 0, 0, null);
SkiaCompat.SetMatrix(context.Canvas, oldMatrix);
context.Canvas.SetMatrix(oldMatrix);
}
}

Expand Down
4 changes: 2 additions & 2 deletions src/Skia/Avalonia.Skia/TransformedGeometryImpl.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public TransformedGeometryImpl(GeometryImpl source, Matrix transform)

var transformedPath = StrokePath = source.StrokePath.Clone();
if (transformedPath is not null)
SkiaCompat.Transform(transformedPath, matrix);
transformedPath.Transform(matrix);

Bounds = transformedPath?.TightBounds.ToAvaloniaRect() ?? default;

Expand All @@ -30,7 +30,7 @@ public TransformedGeometryImpl(GeometryImpl source, Matrix transform)
else if (source.FillPath != null)
{
FillPath = transformedPath = source.FillPath.Clone();
SkiaCompat.Transform(transformedPath, matrix);
transformedPath.Transform(matrix);
}
}

Expand Down
12 changes: 10 additions & 2 deletions tests/Avalonia.RenderTests/TestBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,14 @@ public class TestBase : IDisposable
#endif
public static FontFamily TestFontFamily = new FontFamily(s_fontUri);

#if AVALONIA_SKIA3
// TODO: investigate why output is different.
// Most likely we need to use new SKSamplingOptions API, as old filters are broken with SKBitmap.
private const double AllowedError = 0.15;
#else
private const double AllowedError = 0.022;
#endif

public TestBase(string outputPath)
{
outputPath = outputPath.Replace('\\', Path.DirectorySeparatorChar);
Expand Down Expand Up @@ -89,7 +97,7 @@ protected void CompareImages([CallerMemberName] string testName = "",
if (!skipImmediate)
{
var immediateError = TestRenderHelper.CompareImages(immediate!, expected);
if (immediateError > 0.022)
if (immediateError > AllowedError)
{
Assert.True(false, immediatePath + ": Error = " + immediateError);
}
Expand All @@ -98,7 +106,7 @@ protected void CompareImages([CallerMemberName] string testName = "",
if (!skipCompositor)
{
var compositedError = TestRenderHelper.CompareImages(composited!, expected);
if (compositedError > 0.022)
if (compositedError > AllowedError)
{
Assert.True(false, compositedPath + ": Error = " + compositedError);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
<DefineConstants>AVALONIA_SKIA;AVALONIA_SKIA_SKIP_FAIL</DefineConstants>
<DefineConstants>$(DefineConstants);AVALONIA_SKIA</DefineConstants>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<IncludeLinuxSkia>true</IncludeLinuxSkia>
<IncludeWasmSkia>true</IncludeWasmSkia>

<!-- <AvaSkiaRenderTestsIncludeSkiaSharp3>true</AvaSkiaRenderTestsIncludeSkiaSharp3>-->
<AvsIncludeSkiaSharp3 Condition="'$(AvsIncludeSkiaSharp3)' == '' AND '$(AvaSkiaRenderTestsIncludeSkiaSharp3)' == 'true'">true</AvsIncludeSkiaSharp3>
<DefineConstants Condition="'$(AvsIncludeSkiaSharp3)' == 'true'">$(DefineConstants);AVALONIA_SKIA3</DefineConstants>
<DefineConstants Condition="'$(AvsIncludeSkiaSharp3)' != 'true'">$(DefineConstants);AVALONIA_SKIA2</DefineConstants>
</PropertyGroup>
<ItemGroup>
<Compile Include="..\Avalonia.RenderTests\**\*.cs" />
Expand Down

0 comments on commit 8c7754f

Please sign in to comment.