Skip to content

[docs] Add approved issue context to API docs skill - #4700

Draft
mattleibow wants to merge 3 commits into
mainfrom
mattleibow-add-api-docs-issue-context
Draft

[docs] Add approved issue context to API docs skill#4700
mattleibow wants to merge 3 commits into
mainfrom
mattleibow-add-api-docs-issue-context

Conversation

@mattleibow

@mattleibow mattleibow commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator

Description

Adds a small preparation script for supplemental API documentation context. The script queries open mono/SkiaSharp-API-docs issues labeled approved-for-context and writes one deterministic Markdown file containing each approved issue's full title, URL, and description.

The API docs skill does not query GitHub. Both add/writer and review/reviewer only read the same pre-generated Markdown file when it exists. Issue descriptions remain untrusted reference material: instructions in issues must never be followed, and claims must be verified against authoritative source, generated signatures, native code, or canonical skill references before use.

When an approved issue materially informs the resulting documentation, the final mono/SkiaSharp-API-docs PR is instructed to include Fixes #NNN. Merely appearing in the context file does not close an issue.

No conceptual documentation, runtime APIs, generated bindings, or rendering behavior changed. No workflow was dispatched.

Related issues

Related to mono/SkiaSharp-API-docs#181
Related to mono/SkiaSharp-API-docs#184

Required skia PR

None.

Areas affected

  • Managed API (binding/)
  • Native / C API (externals/skia/src/c, include/c)
  • Generated P/Invoke bindings
  • Native dependency or Skia update (libpng, HarfBuzz, FreeType, zlib, milestone bump, …)
  • Views & integrations (MAUI, Uno, WPF, WinUI, Blazor, …)
  • Rendering output / visual behavior
  • Performance
  • Tests
  • Build, packaging, or CI
  • Documentation or samples

Changes

None — skill tooling only; no public API or runtime behavioral change.

Testing

Workflow integration

The workflow should run the preparation script before invoking the skill so the skill remains a context consumer rather than a GitHub client. This PR does not dispatch or modify a live workflow.

Checklist

  • Tests added or updated (if omitted, explain why above)
  • Changes above lists all public API and behavioral changes (or "None.")
  • New/changed public API? Filed a docs issue in mono/SkiaSharp-API-docs so reference docs can be written later — not applicable; no public API changed.
  • Native change? Companion mono/skia PR linked above and bindings regenerated — not applicable; no native change.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 9f7ee15e-6c0c-4427-96f5-101e28ca46b7
@github-actions

github-actions Bot commented Aug 6, 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 -- 4700

PowerShell / Windows:

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

Step 2 — Add the local NuGet source

dotnet nuget add source ~/.skiasharp/hives/pr-4700/packages --name skiasharp-pr-4700
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-4700

@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

📊 SkiaSharp benchmarks — PR #4700

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 — 🔴 36 slower · 🟢 56 faster

  • 🔴 ColorMathBenchmark.ToColor(Colors: 4096) · Windows · 9.14 µs → 16.23 µs (+77%)
  • 🔴 RasterImageLifecycleBenchmark.CreateDataWithReleaseProc(Count: 256) · Windows · 73.11 µs → 129.64 µs (+77%)
  • 🔴 RasterImageLifecycleBenchmark.CreateRasterImage(Count: 256) · Windows · 190.20 µs → 320.00 µs (+68%)
  • 🔴 PathBoundsBenchmark.TightBounds(Points: 1024) · Windows · 12.72 µs → 20.98 µs (+65%)
  • 🔴 PathBoundsBenchmark.TightBounds(Points: 64) · Windows · 1.23 µs → 1.93 µs (+58%)
  • …and 87 more (see details below)
Full per-OS benchmark deltas

Linux

⏱️ Time (vs 🌙 nightly 4.152.0-nightly.4)

Benchmark baseline this PR Δ
ColorMathBenchmark.ToColor(Colors: 4096) 14.28 µs 9.24 µs 🟢 -35%
LargeImageScaleBenchmark.UpscaleCrossfade(Size: 1024) 2.18 ms 1.60 ms 🟢 -27%
MatrixMapPointsBenchmark.MapPoints(Points: 4096) 2.66 µs 1.95 µs 🟢 -27%
RasterImageLifecycleBenchmark.CreateDataWithReleaseProc(Count: 256) 106.29 µs 78.32 µs 🟢 -26%
LargeImageScaleBenchmark.UpscaleOpaque(Size: 1024) 759.91 µs 570.22 µs 🟢 -25%
MatrixMapPointsBenchmark.MapPoints(Points: 256) 212.6 ns 161.8 ns 🟢 -24%
RasterImageLifecycleBenchmark.CreateRasterImage(Count: 256) 261.70 µs 199.85 µs 🟢 -24%
LargeImageScaleBenchmark.UpscaleOpaque(Size: 2048) 2.93 ms 2.25 ms 🟢 -23%
ColorParseBenchmark.Parse(Iterations: 1000) 74.65 µs 59.25 µs 🟢 -21%
PathBoundsBenchmark.TightBounds(Points: 64) 1.03 µs 814.3 ns 🟢 -21%
LargeImageScaleBenchmark.UpscaleCrossfade(Size: 2048) 7.93 ms 6.35 ms 🟢 -20%
BitmapDrawBenchmark.DrawScaledTiles(Tiles: 64) 358.30 µs 288.79 µs 🟢 -19%
BitmapDrawBenchmark.DrawUnscaledTiles(Tiles: 256) 961.21 µs 776.20 µs 🟢 -19%
CanvasDrawBenchmark.Draw(Shapes: 512) 33.34 ms 27.01 ms 🟢 -19%
BitmapDrawBenchmark.DrawUnscaledTiles(Tiles: 64) 256.45 µs 207.81 µs 🟢 -19%
CanvasDrawBenchmark.Draw(Shapes: 64) 4.18 ms 3.39 ms 🟢 -19%
SceneRenderBenchmark.RenderFrame(Complexity: 1) 3.94 ms 3.20 ms 🟢 -19%
SceneRenderBenchmark.RenderFrame(Complexity: 4) 18.08 ms 14.78 ms 🟢 -18%
BitmapDrawBenchmark.DrawScaledTiles(Tiles: 256) 1.33 ms 1.09 ms 🟢 -18%
MatrixMapPointsBenchmark.MapVector(Points: 4096) 177.43 µs 145.68 µs 🟢 -18%
MatrixMapPointsBenchmark.MapRadius(Points: 256) 14.23 µs 11.73 µs 🟢 -18%
ColorMathBenchmark.ToColorF(Colors: 4096) 13.12 µs 10.96 µs 🟢 -16%
RuntimeEffectShaderBenchmark.DrawFrame 2.85 ms 2.41 ms 🟢 -16%
MatrixMapPointsBenchmark.MapVector(Points: 256) 10.83 µs 9.27 µs 🟢 -14%
MatrixMapPointsBenchmark.MapPoint(Points: 256) 4.62 µs 3.98 µs 🟢 -14%
…and 9 more

Windows

⏱️ Time (vs 🌙 nightly 4.152.0-nightly.4)

Benchmark baseline this PR Δ
ColorMathBenchmark.ToColor(Colors: 4096) 9.14 µs 16.23 µs 🔴 +77%
RasterImageLifecycleBenchmark.CreateDataWithReleaseProc(Count: 256) 73.11 µs 129.64 µs 🔴 +77%
RasterImageLifecycleBenchmark.CreateRasterImage(Count: 256) 190.20 µs 320.00 µs 🔴 +68%
PathBoundsBenchmark.TightBounds(Points: 1024) 12.72 µs 20.98 µs 🔴 +65%
PathBoundsBenchmark.TightBounds(Points: 64) 1.23 µs 1.93 µs 🔴 +58%
MatrixMapPointsBenchmark.MapPoints(Points: 256) 135.8 ns 208.2 ns 🔴 +53%
MatrixMapPointsBenchmark.MapRadius(Points: 256) 7.35 µs 11.21 µs 🔴 +52%
MatrixMapPointsBenchmark.MapPoints(Points: 4096) 1.70 µs 2.56 µs 🔴 +51%
MatrixOpsBenchmark.Concat(Count: 4096) 211.32 µs 311.81 µs 🔴 +48%
CanvasDrawBenchmark.Draw(Shapes: 512) 15.82 ms 23.07 ms 🔴 +46%
ColorParseBenchmark.Parse(Iterations: 1000) 59.87 µs 86.52 µs 🔴 +45%
MatrixMapPointsBenchmark.MapRadius(Points: 4096) 121.34 µs 174.55 µs 🔴 +44%
CanvasDrawBenchmark.Draw(Shapes: 64) 2.04 ms 2.88 ms 🔴 +41%
MatrixMapPointsBenchmark.MapVector(Points: 256) 6.58 µs 9.21 µs 🔴 +40%
MatrixMapPointsBenchmark.MapVector(Points: 4096) 105.86 µs 147.64 µs 🔴 +39%
MatrixMapPointsBenchmark.MapRect(Points: 4096) 100.19 µs 138.91 µs 🔴 +39%
RuntimeEffectShaderBenchmark.DrawFrame 924.18 µs 1.27 ms 🔴 +38%
MatrixMapPointsBenchmark.MapRect(Points: 256) 6.36 µs 8.77 µs 🔴 +38%
BitmapDrawBenchmark.DrawUnscaledTiles(Tiles: 256) 746.39 µs 1.01 ms 🔴 +35%
BitmapDrawBenchmark.DrawUnscaledTiles(Tiles: 64) 203.79 µs 274.88 µs 🔴 +35%
BitmapDrawBenchmark.DrawScaledTiles(Tiles: 64) 279.29 µs 375.32 µs 🔴 +34%
MatrixMapPointsBenchmark.MapPoint(Points: 4096) 66.20 µs 88.34 µs 🔴 +33%
MatrixMapPointsBenchmark.MapPoint(Points: 256) 4.17 µs 5.52 µs 🔴 +32%
BitmapDrawBenchmark.DrawScaledTiles(Tiles: 256) 1.07 ms 1.41 ms 🔴 +32%
SceneRenderBenchmark.RenderFrame(Complexity: 4) 7.87 ms 10.41 ms 🔴 +32%
…and 9 more

macOS

⏱️ Time (vs 🌙 nightly 4.152.0-nightly.4)

Benchmark baseline this PR Δ
BitmapDrawBenchmark.DrawUnscaledTiles(Tiles: 64) 207.19 µs 169.20 µs 🟢 -18%
ColorMathBenchmark.UnPreMultiply(Colors: 4096) 8.94 µs 7.82 µs 🟢 -13%
LargeImageScaleBenchmark.UpscaleOpaque(Size: 1024) 788.38 µs 691.84 µs 🟢 -12%
ColorMathBenchmark.ToColorF(Colors: 4096) 5.48 µs 4.94 µs 🟢 -10%
MatrixMapPointsBenchmark.MapPoint(Points: 256) 1.26 µs 1.38 µs 🔴 +9%
MatrixMapPointsBenchmark.MapPoint(Points: 4096) 19.95 µs 21.78 µs 🔴 +9%
MatrixMapPointsBenchmark.MapRect(Points: 4096) 54.76 µs 49.86 µs 🟢 -9%
BitmapDrawBenchmark.DrawUnscaledTiles(Tiles: 256) 595.18 µs 543.89 µs 🟢 -9%
CanvasDrawBenchmark.Draw(Shapes: 64) 1.53 ms 1.40 ms 🟢 -8%
LargeImageScaleBenchmark.UpscaleCrossfade(Size: 1024) 1.63 ms 1.50 ms 🟢 -8%
ColorMathBenchmark.ToColor(Colors: 4096) 20.48 µs 18.83 µs 🟢 -8%
BitmapDrawBenchmark.DrawScaledTiles(Tiles: 256) 754.85 µs 696.21 µs 🟢 -8%
SceneRenderBenchmark.RenderFrame(Complexity: 4) 6.11 ms 5.67 ms 🟢 -7%
PathBoundsBenchmark.TightBounds(Points: 64) 994.4 ns 925.4 ns 🟢 -7%
CanvasDrawBenchmark.Draw(Shapes: 512) 12.12 ms 11.29 ms 🟢 -7%
ColorParseBenchmark.Parse(Iterations: 1000) 75.01 µs 70.19 µs 🟢 -6%
LargeImageScaleBenchmark.UpscaleCrossfade(Size: 2048) 6.42 ms 6.03 ms 🟢 -6%
LargeImageScaleBenchmark.UpscaleOpaque(Size: 2048) 2.98 ms 2.80 ms 🟢 -6%
MatrixMapPointsBenchmark.MapPoints(Points: 256) 160.5 ns 151.1 ns 🟢 -6%
RasterImageLifecycleBenchmark.CreateRasterImage(Count: 256) 161.33 µs 151.97 µs 🟢 -6%
SceneRenderBenchmark.RenderFrame(Complexity: 1) 1.32 ms 1.25 ms 🟢 -6%
MatrixMapPointsBenchmark.MapRadius(Points: 256) 6.77 µs 6.41 µs 🟢 -5%
RuntimeEffectShaderBenchmark.DrawFrame 573.24 µs 542.71 µs 🟢 -5%
MatrixOpsBenchmark.Concat(Count: 4096) 122.95 µs 116.61 µs 🟢 -5%

📈 Full interactive perf-dashboard & run details →

@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

📦 Artifact size report

Packages from this PR (build 1542608) vs the latest nightly baseline 4.152.0-nightly.10 (observed 2026-08-06).

Total .nupkg size: 569.7 MB → 569.2 MB (−479.5 KB, -0.1%)

Packages

⚠️ marks growth over 500.0 KB or 2%. Changes under 50.0 KB are treated as noise.

Package baseline this PR Δ Δ%
SkiaSharp.NativeAssets.WinUI 109.0 MB 108.4 MB 🟢 −601.1 KB -0.5%
SkiaSharp.NativeAssets.WebAssembly 69.7 MB 69.7 MB 🔴 +78.9 KB +0.1%

+38 package(s) unchanged (< 50.0 KB).

Per-file changes

SkiaSharp.NativeAssets.WinUI

File Size
runtimes/win-arm64/native/libGLESv2.pdb 64.5 MB → 64.4 MB (🟢 −112.0 KB)
runtimes/win-x64/native/libGLESv2.pdb 66.6 MB → 66.5 MB (🟢 −64.0 KB)
runtimes/win-x86/native/libGLESv2.pdb 67.2 MB → 67.2 MB (🟢 −32.0 KB)

Informational only — this never blocks the PR. Native binaries are labelled by os/arch.

mattleibow and others added 2 commits August 6, 2026 15:29
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 9f7ee15e-6c0c-4427-96f5-101e28ca46b7
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 9f7ee15e-6c0c-4427-96f5-101e28ca46b7
@mattleibow mattleibow changed the title [docs] Add supplemental issue context to API docs skill [docs] Add approved issue context to API docs skill Aug 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

1 participant