Skip to content

[skia-sync] Update skia to milestone 152 - #4636

Closed
mattleibow wants to merge 1 commit into
mattleibow-dev-vulkan-sync-validationfrom
skia-sync/m152-mattleibow-dev-vulkan-sync-validation
Closed

[skia-sync] Update skia to milestone 152#4636
mattleibow wants to merge 1 commit into
mattleibow-dev-vulkan-sync-validationfrom
skia-sync/m152-mattleibow-dev-vulkan-sync-validation

Conversation

@mattleibow

Copy link
Copy Markdown
Collaborator

Description

Automated Skia milestone bump from m151 to m152.

This pull request was produced by skia-upstream-sync.

Related issues

N/A — automated upstream synchronization.

Required skia PR

Requires mono/skia#331

Areas affected

  • Managed API (binding/)
  • Native / C API (externals/skia/src/c, include/c)
  • Generated P/Invoke bindings
  • Native dependency or Skia update
  • Views & integrations
  • Rendering output / visual behavior
  • Performance
  • Tests
  • Build, packaging, or CI
  • Documentation or samples

Changes

Update the externals/skia submodule to Chrome milestone m152 and bump SkiaSharp version metadata.

  • Submodule pointer moved to d840f796fd02a3d9375efea9d1a7feead2b2eec2 (merged m152 tree, upstream chrome/m152 @ 2a9b593b, incl. the VMA 3.4.0 roll and the Ganesh Vulkan C API VMA-fallback fix).
  • scripts/VERSIONS.txt: milestone m151 → m152, libSkiaSharp soname 152.0.0, managed assembly/file 4.152.0.0, nuget 4.152.0.
  • cgmanifest.json: skia commit d840f796fd…, upstream ref chrome/m152, merge commit 2a9b593b…, VulkanMemoryAllocator 3.4.0.
  • scripts/azure-templates-variables.yml: milestone variable bumped to 152.
  • No managed wrapper changes and no generated-binding changes: utils/generate.ps1 produced no diffs (the transient HarfBuzzApi.generated.cs auto-revert artifact was reverted). The m152 C API surface consumed by SkiaSharp is unchanged in signature; the only native change is the internal VMA allocator fallback in gr_context.cpp, which is source/ABI compatible.

Testing

Native libSkiaSharp.so.152.0.0 built from the merged m152 source (Linux/x64), then full unfiltered test solution (net10.0, x64):

  • SkiaSharp.Tests: 6084 passed / 33 skipped
  • SkiaSharp.Vulkan.Tests: 23 passed / 2 skipped (declared: ganesh-vulkan-sharpvk not required on Linux)
  • SkiaSharp.Direct3D.Tests: 2 passed / 3 skipped (D3D unavailable on Linux — declared)
  • SkiaSharp.Tests.SingletonInit: 1 passed

GPU backends executed: lavapipe Vulkan 1.4 + softpipe GL 3.3. No required backend was skipped. Overall exit code: 0.

Human review

  • Only Linux/x64 validated locally. Needs CI for macOS (Metal), Windows (D3D), Android, iOS, WebAssembly.
  • Depends on the companion mono/skia m152 PR; merge that first, then repoint this submodule to the resulting skiasharp-branch commit before merging here.
  • Review the Ganesh Vulkan VMA allocator behavior change for downstream impact.

Checklist

  • Tests added or updated when behavior required them, or the report explains why not
  • Changes above lists all public API and behavioral changes or states that none changed
  • Documentation follow-up filed, or no public API changed
  • Companion mono/skia PR linked above and bindings regenerated

Last rendered by the sync workflow: 2026-08-03T02:50:06Z

Bump the externals/skia submodule from Chrome m151 to m152, updating the
soname to 152.0.0 and the managed assembly/nuget versions to 4.152.

The submodule merge preserves the fork curation in DEPS (commented-out
unused deps and security pins) and rolls VulkanMemoryAllocator 3.2.1->3.4.0
to match upstream m152 (required by VulkanAMDMemoryAllocator.cpp). The
Ganesh Vulkan C API now supplies a default VMA allocator because upstream
removed GrVkGpu::Make's internal auto-allocation.

Version files, cgmanifest, and Azure build variables updated accordingly.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@mattleibow mattleibow added partner/agentic-workflows Issues and PRs created by SkiaSharp agentic workflows. type/milestone-bump Bumps the bundled Skia to a new Chrome/Skia milestone (upstream version sync). type/milestone-sync Any Skia upstream sync PR (milestone bump, same-milestone bug-fix re-sync, or tip sync). labels Aug 3, 2026
@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

📦 Try the packages from this PR

Warning

Do not run these scripts without first reviewing the code in this PR.

Step 1 — Download the packages

bash / macOS / Linux:

curl -fsSL https://raw.githubusercontent.com/mono/SkiaSharp/main/scripts/get-skiasharp-pr.sh | bash -s -- 4636

PowerShell / Windows:

iex "& { $(irm https://raw.githubusercontent.com/mono/SkiaSharp/main/scripts/get-skiasharp-pr.ps1) } 4636"

Step 2 — Add the local NuGet source

dotnet nuget add source ~/.skiasharp/hives/pr-4636/packages --name skiasharp-pr-4636
More options
Option Description
--successful-only / -SuccessfulOnly Only use successful builds
--force / -Force Overwrite previously downloaded packages
--list / -List List available artifacts without downloading
--build-id ID / -BuildId ID Download from a specific build

Or download manually from Azure Pipelines — look for the nuget artifact on the build for this PR.

Remove the source when you're done:

dotnet nuget remove source skiasharp-pr-4636

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

📊 SkiaSharp benchmarks — PR #4636

this PR (full source build) vs 🌙 nightly · Linux · Windows · macOS

Informational only — this never blocks the PR. 🟢 faster / less allocation · 🔴 slower / more allocation; moves under 5% are hidden as noise.

⏱️ Times are raw BenchmarkDotNet means, and the ⭐ PR and baseline legs run on separate CI runners, so microbenchmarks can swing run-to-run — treat small time deltas as noise. Allocations are deterministic and the reliable signal. The interactive perf-dashboard (linked below) applies smoothing for the trend view.

Highlights

⏱️ Time — 🔴 47 slower · 🟢 39 faster

  • 🔴 RuntimeEffectShaderBenchmark.DrawFrame · Linux · 2.35 ms → 4.56 ms (+94%)
  • 🔴 RasterImageLifecycleBenchmark.CreateDataWithReleaseProc(Count: 256) · Linux · 73.21 µs → 138.61 µs (+89%)
  • 🔴 SceneRenderBenchmark.RenderFrame(Complexity: 1) · Linux · 3.21 ms → 5.62 ms (+75%)
  • 🔴 SceneRenderBenchmark.RenderFrame(Complexity: 4) · Linux · 14.89 ms → 25.92 ms (+74%)
  • 🔴 MatrixMapPointsBenchmark.MapPoints(Points: 256) · Linux · 165.4 ns → 278.3 ns (+68%)
  • …and 81 more (see details below)

📦 Allocations — 🔴 1 more alloc · 🟢 0 less alloc

  • 🔴 RuntimeEffectShaderBenchmark.DrawFrame · Linux · 683 B → 730 B (+7%)
Full per-OS benchmark deltas

Linux

⏱️ Time (vs 🌙 nightly 4.151.0-nightly.119)

Benchmark baseline this PR Δ
RuntimeEffectShaderBenchmark.DrawFrame 2.35 ms 4.56 ms 🔴 +94%
RasterImageLifecycleBenchmark.CreateDataWithReleaseProc(Count: 256) 73.21 µs 138.61 µs 🔴 +89%
SceneRenderBenchmark.RenderFrame(Complexity: 1) 3.21 ms 5.62 ms 🔴 +75%
SceneRenderBenchmark.RenderFrame(Complexity: 4) 14.89 ms 25.92 ms 🔴 +74%
MatrixMapPointsBenchmark.MapPoints(Points: 256) 165.4 ns 278.3 ns 🔴 +68%
MatrixMapPointsBenchmark.MapPoints(Points: 4096) 1.93 µs 3.17 µs 🔴 +65%
ColorMathBenchmark.ToColorF(Colors: 4096) 11.01 µs 17.02 µs 🔴 +55%
RasterImageLifecycleBenchmark.CreateRasterImage(Count: 256) 184.05 µs 281.03 µs 🔴 +53%
LargeImageScaleBenchmark.UpscaleCrossfade(Size: 2048) 6.29 ms 9.40 ms 🔴 +49%
PathBoundsBenchmark.TightBounds(Points: 64) 775.8 ns 1.14 µs 🔴 +47%
CanvasDrawBenchmark.Draw(Shapes: 64) 3.45 ms 4.87 ms 🔴 +41%
CanvasDrawBenchmark.Draw(Shapes: 512) 27.55 ms 38.92 ms 🔴 +41%
LargeImageScaleBenchmark.UpscaleCrossfade(Size: 1024) 1.59 ms 2.19 ms 🔴 +38%
LargeImageScaleBenchmark.UpscaleOpaque(Size: 2048) 2.21 ms 3.03 ms 🔴 +37%
PathBoundsBenchmark.TightBounds(Points: 1024) 8.75 µs 11.95 µs 🔴 +37%
BitmapDrawBenchmark.DrawUnscaledTiles(Tiles: 256) 771.90 µs 1.05 ms 🔴 +35%
BitmapDrawBenchmark.DrawUnscaledTiles(Tiles: 64) 206.68 µs 277.71 µs 🔴 +34%
LargeImageScaleBenchmark.UpscaleOpaque(Size: 1024) 570.42 µs 760.27 µs 🔴 +33%
BitmapDrawBenchmark.DrawScaledTiles(Tiles: 256) 1.09 ms 1.43 ms 🔴 +31%
BitmapDrawBenchmark.DrawScaledTiles(Tiles: 64) 290.00 µs 378.17 µs 🔴 +30%
MatrixMapPointsBenchmark.MapRect(Points: 256) 9.89 µs 12.39 µs 🔴 +25%
ColorParseBenchmark.Parse(Iterations: 1000) 59.20 µs 73.56 µs 🔴 +24%
ColorMathBenchmark.PreMultiply(Colors: 4096) 11.26 µs 13.38 µs 🔴 +19%
MatrixMapPointsBenchmark.MapVector(Points: 4096) 145.55 µs 172.74 µs 🔴 +19%
MatrixOpsBenchmark.Concat(Count: 4096) 185.25 µs 219.48 µs 🔴 +18%
…and 6 more

📦 Allocations (vs 🌙 nightly 4.151.0-nightly.119)

Benchmark baseline this PR Δ
RuntimeEffectShaderBenchmark.DrawFrame 683 B 730 B 🔴 +7%

Windows

⏱️ Time (vs 🌙 nightly 4.151.0-nightly.119)

Benchmark baseline this PR Δ
RuntimeEffectShaderBenchmark.DrawFrame 1.18 ms 696.02 µs 🟢 -41%
ColorMathBenchmark.UnPreMultiply(Colors: 4096) 12.44 µs 7.92 µs 🟢 -36%
ColorMathBenchmark.ToColor(Colors: 4096) 14.42 µs 9.96 µs 🟢 -31%
ColorMathBenchmark.PreMultiply(Colors: 4096) 13.21 µs 9.18 µs 🟢 -31%
BitmapDrawBenchmark.DrawScaledTiles(Tiles: 256) 1.30 ms 952.67 µs 🟢 -27%
MatrixOpsBenchmark.Concat(Count: 4096) 247.23 µs 183.88 µs 🟢 -26%
BitmapDrawBenchmark.DrawUnscaledTiles(Tiles: 256) 929.83 µs 697.78 µs 🟢 -25%
CanvasDrawBenchmark.Draw(Shapes: 64) 2.73 ms 2.08 ms 🟢 -24%
LargeImageScaleBenchmark.UpscaleCrossfade(Size: 2048) 10.60 ms 8.11 ms 🟢 -24%
BitmapDrawBenchmark.DrawUnscaledTiles(Tiles: 64) 246.54 µs 189.59 µs 🟢 -23%
BitmapDrawBenchmark.DrawScaledTiles(Tiles: 64) 333.94 µs 257.18 µs 🟢 -23%
CanvasDrawBenchmark.Draw(Shapes: 512) 21.32 ms 16.49 ms 🟢 -23%
LargeImageScaleBenchmark.UpscaleCrossfade(Size: 1024) 2.61 ms 2.04 ms 🟢 -22%
MatrixOpsBenchmark.Invert(Count: 4096) 139.93 µs 109.95 µs 🟢 -21%
ColorParseBenchmark.Parse(Iterations: 1000) 77.47 µs 60.96 µs 🟢 -21%
MatrixMapPointsBenchmark.MapPoint(Points: 256) 4.85 µs 3.84 µs 🟢 -21%
MatrixMapPointsBenchmark.MapPoint(Points: 4096) 76.04 µs 60.34 µs 🟢 -21%
SceneRenderBenchmark.RenderFrame(Complexity: 4) 10.29 ms 8.58 ms 🟢 -17%
MatrixMapPointsBenchmark.MapRadius(Points: 4096) 150.37 µs 126.64 µs 🟢 -16%
SceneRenderBenchmark.RenderFrame(Complexity: 1) 2.17 ms 1.86 ms 🟢 -14%
MatrixMapPointsBenchmark.MapVector(Points: 256) 8.16 µs 7.01 µs 🟢 -14%
PathBoundsBenchmark.TightBounds(Points: 64) 1.53 µs 1.33 µs 🟢 -13%
MatrixMapPointsBenchmark.MapRadius(Points: 256) 9.16 µs 8.00 µs 🟢 -13%
MatrixMapPointsBenchmark.MapPoints(Points: 4096) 2.54 µs 2.23 µs 🟢 -13%
LargeImageScaleBenchmark.UpscaleOpaque(Size: 2048) 3.00 ms 2.65 ms 🟢 -12%
…and 6 more

macOS

⏱️ Time (vs 🌙 nightly 4.151.0-nightly.119)

Benchmark baseline this PR Δ
MatrixMapPointsBenchmark.MapPoints(Points: 256) 131.0 ns 219.7 ns 🔴 +68%
BitmapDrawBenchmark.DrawScaledTiles(Tiles: 64) 185.52 µs 277.78 µs 🔴 +50%
ColorMathBenchmark.ToColorF(Colors: 4096) 4.94 µs 6.67 µs 🔴 +35%
BitmapDrawBenchmark.DrawUnscaledTiles(Tiles: 64) 154.99 µs 206.64 µs 🔴 +33%
ColorParseBenchmark.Parse(Iterations: 1000) 64.32 µs 84.45 µs 🔴 +31%
ColorMathBenchmark.UnPreMultiply(Colors: 4096) 7.47 µs 9.77 µs 🔴 +31%
ColorMathBenchmark.PreMultiply(Colors: 4096) 8.43 µs 10.86 µs 🔴 +29%
RasterImageLifecycleBenchmark.CreateRasterImage(Count: 256) 196.51 µs 147.73 µs 🟢 -25%
CanvasDrawBenchmark.Draw(Shapes: 512) 11.01 ms 13.62 ms 🔴 +24%
CanvasDrawBenchmark.Draw(Shapes: 64) 1.39 ms 1.70 ms 🔴 +22%
BitmapDrawBenchmark.DrawScaledTiles(Tiles: 256) 675.35 µs 819.49 µs 🔴 +21%
BitmapDrawBenchmark.DrawUnscaledTiles(Tiles: 256) 541.89 µs 642.09 µs 🔴 +18%
ColorMathBenchmark.ToColor(Colors: 4096) 18.75 µs 21.91 µs 🔴 +17%
MatrixOpsBenchmark.Invert(Count: 4096) 65.11 µs 54.82 µs 🟢 -16%
SceneRenderBenchmark.RenderFrame(Complexity: 1) 1.31 ms 1.13 ms 🟢 -13%
PathBoundsBenchmark.TightBounds(Points: 1024) 9.25 µs 8.12 µs 🟢 -12%
LargeImageScaleBenchmark.UpscaleCrossfade(Size: 1024) 1.43 ms 1.61 ms 🔴 +12%
LargeImageScaleBenchmark.UpscaleCrossfade(Size: 2048) 5.71 ms 6.33 ms 🔴 +11%
SceneRenderBenchmark.RenderFrame(Complexity: 4) 5.95 ms 5.30 ms 🟢 -11%
MatrixMapPointsBenchmark.MapPoint(Points: 4096) 20.23 µs 18.43 µs 🟢 -9%
MatrixMapPointsBenchmark.MapPoint(Points: 256) 1.31 µs 1.42 µs 🔴 +8%
MatrixMapPointsBenchmark.MapPoints(Points: 4096) 1.81 µs 1.67 µs 🟢 -8%
MatrixMapPointsBenchmark.MapRadius(Points: 256) 6.61 µs 6.22 µs 🟢 -6%
MatrixMapPointsBenchmark.MapRect(Points: 4096) 50.31 µs 47.43 µs 🟢 -6%

📈 Full interactive perf-dashboard & run details →

@mattleibow

Copy link
Copy Markdown
Collaborator Author

Superseded by a fresh target-152 validation run from the updated workflow branch. This validation PR was not merged.

@mattleibow mattleibow closed this Aug 3, 2026
@mattleibow
mattleibow deleted the skia-sync/m152-mattleibow-dev-vulkan-sync-validation branch August 3, 2026 15:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

partner/agentic-workflows Issues and PRs created by SkiaSharp agentic workflows. type/milestone-bump Bumps the bundled Skia to a new Chrome/Skia milestone (upstream version sync). type/milestone-sync Any Skia upstream sync PR (milestone bump, same-milestone bug-fix re-sync, or tip sync).

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant