Skip to content

Instantly share code, notes, and snippets.

@mattleibow
Last active April 27, 2026 09:39
Show Gist options
  • Select an option

  • Save mattleibow/76ac6175fac12bf85c574ee53bdb289d to your computer and use it in GitHub Desktop.

Select an option

Save mattleibow/76ac6175fac12bf85c574ee53bdb289d to your computer and use it in GitHub Desktop.
Skia GM Samples Audit: 373 samples analyzed for SkiaSharp compatibility
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Skia GM Samples Audit β€” SkiaSharp Compatibility</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<style>
:root{--bg:#f6f8fa;--border:#d8dee4;--muted:#656d76;}
body{background:var(--bg);color:#1f2328;font-size:14px;}
.shell{max-width:1200px;}
.pill{display:inline-block;font-size:.68rem;font-weight:600;padding:1px 7px;border-radius:10px;white-space:nowrap;vertical-align:middle;cursor:pointer;user-select:none;}
.pill:hover{opacity:.8;}.pill.dim{opacity:.25;}
.i-high{background:#dcfce7;color:#166534;}.i-medium{background:#fef3c7;color:#92400e;}.i-low{background:#f3f4f6;color:#6b7280;}
.a-yes{background:#dcfce7;color:#166534;}.a-no{background:#fee2e2;color:#991b1b;}
.ss-none{background:#dbeafe;color:#1e40af;}.ss-similar{background:#fef3c7;color:#92400e;}.ss-existing{background:#f3f4f6;color:#6b7280;}
.row-item{border-bottom:1px solid #eaeef2;padding:7px 12px;cursor:pointer;}
.row-item:hover{background:#f0f4f8;}
.row-item.expanded{background:#fafbfc;}
.row-name{font-weight:600;font-size:.88rem;}
.row-chevron{color:#bbb;font-size:.7rem;margin-right:6px;transition:transform .15s;}
.row-item.expanded .row-chevron{transform:rotate(90deg);color:#666;}
.row-desc{color:var(--muted);font-size:.78rem;margin-top:2px;}
.row-detail{display:none;padding:8px 0 4px 0;font-size:.82rem;}
.row-item.expanded .row-detail{display:block;}
.detail-grid{display:grid;grid-template-columns:110px 1fr;gap:2px 12px;}
.detail-label{color:var(--muted);font-weight:600;font-size:.72rem;text-transform:uppercase;}
.detail-value{font-size:.82rem;}
.detail-value code{font-size:.78rem;background:#f0f4f8;padding:1px 4px;border-radius:3px;}
.summary-bar{background:#fff;border:1px solid var(--border);border-radius:8px;padding:12px 16px;margin-bottom:12px;}
.summary-num{font-size:1.5rem;font-weight:700;line-height:1;}
.summary-label{font-size:.65rem;color:var(--muted);text-transform:uppercase;letter-spacing:.5px;}
.filter-bar{display:flex;flex-direction:column;gap:4px;padding:10px 12px;background:#fff;border:1px solid var(--border);border-radius:8px;margin-bottom:8px;}
.filter-row{display:flex;gap:6px;align-items:center;flex-wrap:wrap;}
.filter-label{font-size:.7rem;color:var(--muted);font-weight:600;width:80px;flex-shrink:0;text-align:right;padding-right:6px;}
.search-box{font-size:.8rem;padding:3px 10px;border:1px solid var(--border);border-radius:6px;width:300px;}
.filter-count{font-size:.72rem;color:var(--muted);padding:0 12px 4px;}
</style>
</head>
<body>
<div class="shell mx-auto px-3 py-3">
<div class="d-flex align-items-center mb-2">
<strong style="font-size:1.15rem">Skia GM Samples Audit</strong>
<span class="text-muted" style="font-size:.8rem;margin-left:8px">373 samples from google/skia/gm/</span>
</div>
<div class="summary-bar d-flex gap-4 align-items-center flex-wrap" id="summary-bar"></div>
<div class="filter-bar">
<div class="filter-row">
<span class="filter-label">Search:</span>
<input type="text" class="search-box" id="search" placeholder="Search samples..." oninput="applyFilters()">
</div>
<div class="filter-row"><span class="filter-label">Interest:</span><span id="fr-interest"></span></div>
<div class="filter-row"><span class="filter-label">APIs:</span><span id="fr-avail"></span></div>
<div class="filter-row"><span class="filter-label">Sample:</span><span id="fr-status"></span></div>
</div>
<div class="filter-count" id="filter-count"></div>
<div id="list"></div>
</div>
<script>
const DATA = [{"file": "drawbitmaprect.cpp", "name": "Draw Bitmap Rect", "description": "Tests drawImageRect with various source and destination rectangles, demonstrating scaling and sampling modes.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawImageRect", "SkImage", "SkBitmap", "SkSamplingOptions", "SkMaskFilter"], "notes": "Core technique for drawing scaled images; fully supported in SkiaSharp", "sampleStatus": "none", "matchedSample": null}, {"file": "image.cpp", "name": "Image", "description": "Comprehensive image test covering raster images, pictures, scaling, caching, color spaces, and image generation from multiple sources.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkImage", "SkBitmap", "SkPicture", "SkPictureRecorder", "SkColorSpace", "SkImageInfo"], "notes": "Core image API coverage. GPU texture paths have limited SkiaSharp support.", "sampleStatus": "none", "matchedSample": null}, {"file": "lighting.cpp", "name": "Image Lighting Filters", "description": "Demonstrates point, distant, and spot lighting effects with both diffuse and specular components, various light positions, angles, and surface properties.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkImageFilters::PointLitDiffuse", "SkImageFilters::PointLitSpecular", "SkImageFilters::DistantLitDiffuse", "SkImageFilters::SpotLitDiffuse", "SkPoint3"], "notes": "Comprehensive lighting test with crop rects and animation.", "sampleStatus": "none", "matchedSample": null}, {"file": "makecolorspace.cpp", "name": "Make Color Space", "description": "Tests image color space conversion for both lazy and raster images, including sRGB, linear, and wide gamut color spaces.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkImage::makeColorSpace", "SkImage::reinterpretColorSpace", "SkImage::makeColorTypeAndColorSpace", "SkColorSpace::MakeRGB", "SkColorSpace::MakeSRGB"], "notes": "Tests GPU context integration but core color space APIs available in SkiaSharp.", "sampleStatus": "none", "matchedSample": null}, {"file": "overdrawcanvas.cpp", "name": "Overdraw Visualization Canvas", "description": "Demonstrates SkOverdrawCanvas which tracks pixel overdraw by counting how many times each pixel is covered, visualized with SkOverdrawColorFilter.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkOverdrawCanvas", "SkOverdrawColorFilter", "SkCanvas::drawRect", "SkCanvas::drawString", "SkSurface"], "notes": "Performance visualization tool. All APIs available in SkiaSharp.", "sampleStatus": "none", "matchedSample": null}, {"file": "bitmapfilters.cpp", "name": "Bitmap Filters", "description": "Tests bitmap rendering with different sampling options (no filter, linear, dithered) and alpha blending effects.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SKImage", "SKCanvas.drawImage", "SKSamplingOptions", "SKFilterMode", "SKBitmap.extractAlpha", "SKPaint.setAlphaf"], "notes": "Demonstrates filtering and dithering effects for bitmap rendering.", "sampleStatus": "none", "matchedSample": null}, {"file": "circle_sizes.cpp", "name": "Circle Sizes", "description": "Tests rendering circles of various sizes from 1 to 16 pixels to verify correct circle rasterization across the full size range.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SKCanvas", "SKPaint"], "notes": "Validation test for circle rendering quality; addresses crbug.com/772953", "sampleStatus": "none", "matchedSample": null}, {"file": "drrect.cpp", "name": "Double Rounded Rectangle", "description": "Demonstrates drawing double rounded rectangles (outer rounded rect with inner hole) with various radius configurations.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawDRRect", "SkRRect", "SkRect", "SkPaint"], "notes": "drawDRRect is available as DrawDoubleRoundRect in SkiaSharp", "sampleStatus": "none", "matchedSample": null}, {"file": "image_pict.cpp", "name": "Image Picture", "description": "Tests image creation from pictures using DeferredFromPicture and image caching, demonstrating pixelation effects when pictures are rasterized to images.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkPicture", "SkPictureRecorder", "SkImages::DeferredFromPicture", "SkImage", "SkCanvas"], "notes": "Core image and picture feature. All APIs available in SkiaSharp.", "sampleStatus": "none", "matchedSample": null}, {"file": "multipicturedraw.cpp", "name": "Multi-Picture Drawing", "description": "Demonstrates drawing with multiple pictures and recorder functionality, testing picture composition patterns.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkPicture", "SkPictureRecorder", "SkCanvas", "SkPaint"], "notes": "File not found in google/skia repository (may have been removed or renamed).", "sampleStatus": "none", "matchedSample": null}, {"file": "nested_group_opacity.cpp", "name": "Nested Group Opacity", "description": "Tests opacity rendering with nested groups and save/restore operations, focusing on correct alpha blending in layered drawing.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas", "SkPaint", "SkSurface"], "notes": "File not found in google/skia repository (may have been removed or renamed).", "sampleStatus": "none", "matchedSample": null}, {"file": "region.cpp", "name": "Region Operations", "description": "Tests SKRegion operations including union, intersection, and difference with region-based clipping and rendering.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkRegion", "SkCanvas", "SkPaint"], "notes": "File not found in google/skia repository (may have been removed or renamed). SKRegion is available in SkiaSharp.", "sampleStatus": "none", "matchedSample": null}, {"file": "bitmapcopy.cpp", "name": "Bitmap Copy", "description": "Tests bitmap color format conversions by copying bitmaps between different color types (565, 4444, N32) and displaying them.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SKBitmap", "SKBitmap.allocN32Pixels", "SKCanvas.drawImage", "SKImageInfo", "SKColorType"], "notes": "Regression test for bitmap format conversion functionality.", "sampleStatus": "none", "matchedSample": null}, {"file": "clip_strokerect.cpp", "name": "Clip Stroke Rect", "description": "Tests clipping behavior when drawing stroked rectangles with specific stroke widths that previously caused edge artifacts.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SKCanvas.ClipRect", "SKCanvas.DrawRect", "SKPaint"], "notes": "Regression test for specific rasterization edge case with stroked rectangles under clip.", "sampleStatus": "none", "matchedSample": null}, {"file": "clipdrawdraw.cpp", "name": "Clip Draw Draw", "description": "Tests potential 1-pixel wide artifact remnants when combining clip operations with stroked rectangle drawing.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SKCanvas.ClipRect", "SKCanvas.DrawRect", "SKCanvas.Save/Restore", "SKPaint"], "notes": "Regression test for bug crbug.com/423834 involving clip-rect-draw patterns.", "sampleStatus": "none", "matchedSample": null}, {"file": "drrect_small_inner.cpp", "name": "DRRect with Small Inner Radius", "description": "Tests edge cases of double rounded rectangles where inner radius is very small or offset, stressing GPU rasterization.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawDRRect", "SkRRect", "SkRect", "SkPaint"], "notes": "GPU-specific edge case testing for drrect rendering", "sampleStatus": "none", "matchedSample": null}, {"file": "fiddle.cpp", "name": "Fiddle Placeholder", "description": "Empty stub GM designed for pasting code from fiddle.skia.org demonstrations.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas"], "notes": "No actual test content; serves as template for external fiddle code", "sampleStatus": "none", "matchedSample": null}, {"file": "make_raster_image.cpp", "name": "Make Raster Image", "description": "Tests converting an image (potentially GPU-backed or lazy) to a raster (CPU) image using makeRasterImage API.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkImage::makeRasterImage", "SkCanvas::drawImage"], "notes": "Simple utility function test. SkiaSharp has SKImage.ToRasterImage().", "sampleStatus": "none", "matchedSample": null}, {"file": "simplerect.cpp", "name": "Simple Rect Stress Test", "description": "Performance stress test that draws 10,000 random rectangles with different sizes, positions, and colors.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawRect", "SkPaint"], "notes": "Basic stress test. All required APIs available in SkiaSharp.", "sampleStatus": "none", "matchedSample": null}, {"file": "skbug_9819.cpp", "name": "Skbug 9819 - Color Format Conversion", "description": "Tests drawing RGBA and BGRA bitmaps to ensure correct color space handling with automatic grading to verify correct output.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas", "SkBitmap", "SkColorSpace", "SkImage"], "notes": "Bug regression test; color format conversion test.", "sampleStatus": "none", "matchedSample": null}, {"file": "surface.cpp", "name": "Surface Properties and Snapshots", "description": "Tests surface properties (pixel geometry, contrast, gamma), image snapshots, copy-on-write, and GPU backend surfaces.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkSurface", "SkCanvas", "SkImage", "makeImageSnapshot", "SkImageInfo", "SkSurfaceProps"], "notes": "Some tests are GPU-specific requiring GrDirectContext.", "sampleStatus": "none", "matchedSample": null}, {"file": "aarecteffect.cpp", "name": "AA Rect Effect (GPU-Only)", "description": "Tests GPU fragment processor for antialiased rectangular clipping via GrFragmentProcessor::Rect with various edge types and clip edge cases.", "interesting": "low", "apis_available": false, "missing_apis": ["GrFragmentProcessor::Rect", "GrPaint", "GrClipEdgeType", "SurfaceDrawContext", "GrRecordingContext"], "key_apis": ["SkCanvas::drawRect", "SkCanvas::save", "SkCanvas::restore"], "notes": "GPU-backend-specific test using Ganesh internal APIs; requires GrRecordingContext and direct GPU fragment processor access", "sampleStatus": "none", "matchedSample": null}, {"file": "clear_swizzle.cpp", "name": "Clear with Swizzle", "description": "GPU-specific test for clearing surfaces with different color swizzles. Tests partial and full clears on both onscreen and offscreen surfaces.", "interesting": "low", "apis_available": false, "missing_apis": ["GrDirectContext internals", "GrRecordingContext", "SurfaceFillContext", "skgpu::Swizzle"], "key_apis": ["SKCanvas", "SKSurface"], "notes": "This is a GPU backend-specific test using Ganesh internals (GrRecordingContext, SurfaceFillContext). Not portable to SkiaSharp.", "sampleStatus": "none", "matchedSample": null}, {"file": "copy_to_4444.cpp", "name": "Copy to 4444 Color Format", "description": "Tests copying bitmaps from 8888 color format to 4444 ARGB format with dithering, and direct pixel manipulation using SkPixmap.", "interesting": "low", "apis_available": false, "missing_apis": ["SKBitmap.CopyTo with ARGB4444"], "key_apis": ["SkBitmap::copyTo", "SkBitmap::asImage", "SkPixmap", "SkImageInfo", "kARGB_4444_SkColorType"], "notes": "Color type conversion test; ARGB4444 support may be limited in SkiaSharp", "sampleStatus": "none", "matchedSample": null}, {"file": "crbug_1316055.cpp", "name": "Crbug 1316055 - Regression Test", "description": "Regression test for a specific Chromium rendering issue. Tests particular drawing behavior or edge case identified as a bug.", "interesting": "low", "apis_available": false, "missing_apis": ["Specific GPU-backend rendering behavior"], "key_apis": ["SkCanvas", "SkPaint"], "notes": "File not found in google/skia repository; likely removed or renamed. Bug regression test.", "sampleStatus": "none", "matchedSample": null}, {"file": "downsamplebitmap.cpp", "name": "Downsample Bitmap", "description": "File does not exist in current google/skia repository (likely removed or renamed).", "interesting": "low", "apis_available": false, "missing_apis": [], "key_apis": [], "notes": "File not found at gm/downsamplebitmap.cpp in current Skia HEAD", "sampleStatus": "none", "matchedSample": null}, {"file": "draw_bitmap_rect_perf.cpp", "name": "Draw Bitmap Rect Performance", "description": "File does not exist in current google/skia repository (likely removed or renamed).", "interesting": "low", "apis_available": false, "missing_apis": [], "key_apis": [], "notes": "File not found at gm/draw_bitmap_rect_perf.cpp in current Skia HEAD", "sampleStatus": "none", "matchedSample": null}, {"file": "extractbitmap.cpp", "name": "Extract Bitmap", "description": "File does not exist in current google/skia repository (likely removed or renamed).", "interesting": "low", "apis_available": false, "missing_apis": [], "key_apis": [], "notes": "File not found at gm/extractbitmap.cpp in current Skia HEAD", "sampleStatus": "none", "matchedSample": null}, {"file": "filterbitmap.cpp", "name": "Filter Bitmap", "description": "File does not exist in current google/skia repository (likely removed or renamed).", "interesting": "low", "apis_available": false, "missing_apis": [], "key_apis": [], "notes": "File not found at gm/filterbitmap.cpp in current Skia HEAD", "sampleStatus": "none", "matchedSample": null}, {"file": "good_bitmap_copy.cpp", "name": "Good Bitmap Copy", "description": "File does not exist in the current google/skia repository. Likely removed or renamed.", "interesting": "low", "apis_available": false, "missing_apis": [], "key_apis": [], "notes": "File not found in google/skia repo at gm/good_bitmap_copy.cpp.", "sampleStatus": "none", "matchedSample": null}, {"file": "graphite_replay.cpp", "name": "Graphite Recording Replay", "description": "Tests Graphite backend recording and replay functionality with deferred canvas operations and saved layers.", "interesting": "low", "apis_available": false, "missing_apis": ["skgpu::graphite::Recorder", "skgpu::graphite::Recording", "skgpu::graphite::Context"], "key_apis": ["skgpu::graphite::Recorder", "skgpu::graphite::Recording", "SkSurface", "SkCanvas::saveLayer"], "notes": "Graphite backend-specific test. SkiaSharp does not support Graphite.", "sampleStatus": "none", "matchedSample": null}, {"file": "grlayersblended.cpp", "name": "GR Layers Blended", "description": "File does not exist in the current google/skia repository. Likely a deprecated GPU-specific Ganesh test.", "interesting": "low", "apis_available": false, "missing_apis": [], "key_apis": [], "notes": "File not found in google/skia repo.", "sampleStatus": "none", "matchedSample": null}, {"file": "rects.cpp", "name": "Rects", "description": "File not found in google/skia gm/ directory.", "interesting": "low", "apis_available": false, "missing_apis": [], "key_apis": [], "notes": "File does not exist at gm/rects.cpp.", "sampleStatus": "none", "matchedSample": null}, {"file": "simple_magnification.cpp", "name": "Simple Magnification", "description": "File not found in google/skia gm/ directory.", "interesting": "low", "apis_available": false, "missing_apis": [], "key_apis": [], "notes": "File does not exist at gm/simple_magnification.cpp.", "sampleStatus": "none", "matchedSample": null}, {"file": "smallimage.cpp", "name": "Small Image", "description": "File not found in google/skia gm/ directory.", "interesting": "low", "apis_available": false, "missing_apis": [], "key_apis": [], "notes": "File does not exist at gm/smallimage.cpp.", "sampleStatus": "none", "matchedSample": null}, {"file": "windowrectangles.cpp", "name": "Window Rectangles", "description": "Tests GPU-specific window rectangle optimization for stencil clipping with various clip stack configurations and clip types.", "interesting": "low", "apis_available": false, "missing_apis": ["Window rectangles (GPU stencil clipping)"], "key_apis": ["SkCanvas", "SkPaint", "SkRect", "SkRRect"], "notes": "GPU backend-specific optimization test. Window rectangles are Ganesh/GPU-only, not available in SkiaSharp.", "sampleStatus": "none", "matchedSample": null}, {"file": "aaxfermodes.cpp", "name": "Antialiased Transfer Modes", "description": "Comprehensive test of antialiased rendering with all SkBlendMode combinations, testing Porter-Duff and advanced blend modes with various shapes.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawRect", "SkCanvas::drawPath", "SkCanvas::rotate", "SkPaint::setBlendMode", "SkPaint::setAntiAlias", "SkFont"], "notes": "Tests all blend modes (Porter-Duff and advanced) with antialiased shapes including square, diamond, oval, and concave paths", "sampleStatus": "similar", "matchedSample": "Blend Modes"}, {"file": "addarc.cpp", "name": "Arc Path Operations", "description": "Tests SkPath::addArc with various arc configurations, including animated rotation, arc measurement, and stroked/filled circles with analytic antialiasing.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkPath::addArc", "SkPath::arcTo", "SkPathMeasure", "SkCanvas::drawPath", "SkCanvas::drawOval", "SkCanvas::drawLine"], "notes": "Includes animated arc demos, arc measurement tests, and HTML5 canvas arc compatibility tests", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "animated_image_orientation.cpp", "name": "Animated Image Orientation", "description": "Tests SKAnimatedImage with image rotation, scaling, cropping, and post-processing with various configurations.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SKAnimatedImage", "SKAnimatedImage.makePictureSnapshot", "SKAnimatedImage.getCurrentFrame", "SKAndroidCodec", "SKCanvas.drawImage", "SKCanvas.drawPicture"], "notes": "Good example of SKAnimatedImage API usage with transformations. Available in SkiaSharp.", "sampleStatus": "similar", "matchedSample": "Image Decoder"}, {"file": "arithmode.cpp", "name": "Arithmetic Mode", "description": "Demonstrates SKImageFilter.Arithmetic and SkBlenders.Arithmetic with various K-coefficients. Shows blending via filters, shaders, and runtime effects.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SKImageFilter.Arithmetic", "SKBlenders.Arithmetic", "SKRuntimeEffect", "SKImageFilter.Image", "SKShader.Blend"], "notes": "Comprehensive demonstration of arithmetic blending. Shows multiple APIs (filter, blender, shader, runtime effect).", "sampleStatus": "similar", "matchedSample": "Shader Playground"}, {"file": "bleed.cpp", "name": "Bleed (Source Rect Constraint)", "description": "Tests drawImageRect behavior with different SrcRectConstraint modes (strict vs fast) and sampling options, demonstrating how filtering affects edge bleeding.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawImageRect", "SkImage", "SkSamplingOptions", "SkMaskFilter", "SkCanvas::concat"], "notes": "Comprehensive test of src rect constraints, sampling modes, and mask filters. Highly useful for understanding image scaling edge cases.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "bmpfilterqualityrepeat.cpp", "name": "Bitmap Filter Quality with Repeat Tiling", "description": "Demonstrates and tests different filter quality levels (nearest, linear, mipmap, cubic) when tiling bitmaps with repeat mode to verify seam quality.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SKCanvas", "SKPaint", "SKBitmap", "SKShader", "SKMatrix", "SKSamplingOptions", "SKTileMode"], "notes": "Shows practical tradeoffs between filter quality and performance; useful for understanding sampling options", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "circulararcs.cpp", "name": "Circular Arcs", "description": "Tests drawing arcs with various start angles, sweep angles, stroke styles, and anti-aliasing settings. Demonstrates arc drawing with fill, stroke, hairline, and dash effects.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SKCanvas.DrawArc", "SKPaint", "SKPathEffect.DashPathEffect"], "notes": "Comprehensive arc test covering edge cases like 360-degree sweeps, negative sweeps, and large angles.", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "clip_sierpinski_region.cpp", "name": "Sierpinski Region Clip", "description": "Tests region-based clipping using the Sierpinski fractal pattern combined with canvas transforms and save/restore layers.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SKCanvas.ClipRegion", "SKRegion", "SKCanvas.SaveLayer", "SKCanvas.Rotate"], "notes": "Demonstrates complex region operations with union and canvas matrix transformations.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "color4f.cpp", "name": "Color4f", "description": "Tests Color4f (floating-point color) API with color shaders, color filters, and color space management. Demonstrates color-managed rendering across different color spaces.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SKColor4f", "SKShaders.Color(Color4f)", "SKColorFilter.Blend(Color4f)", "SKColorSpace", "SKColorMatrix", "SKSurface"], "notes": "Excellent demonstration of color-managed drawing. All APIs including SKColor4f, color shaders, blend color filters, and color spaces are available in SkiaSharp.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "colorspace.cpp", "name": "Color Space", "description": "Tests color space conversion consistency by rendering images through intermediate color spaces with various transfer functions (sRGB, 2.2, Linear, Rec2020, PQ, HLG) and gamuts.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SKColorSpace.MakeRGB", "SKImage.makeColorSpace", "SKSurface", "SKFont", "SKCanvas"], "notes": "Excellent test of color-managed rendering. SkiaSharp has good support for SKColorSpace with various transfer functions and gamuts (sRGB, AdobeRGB, DisplayP3, Rec2020).", "sampleStatus": "similar", "matchedSample": "Text Lab"}, {"file": "complexclip.cpp", "name": "Complex Clip", "description": "Demonstrates complex clipping operations with path-based clips, clip operations (intersect/difference), antialiasing, and saveLayer interactions.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::clipPath", "SkCanvas::save", "SkCanvas::restore", "SkCanvas::saveLayer", "SkPaint", "SkPath", "SkClipOp"], "notes": "Core clipping functionality; fully reproducible in SkiaSharp", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "complexclip2.cpp", "name": "Complex Clip 2", "description": "Tests various clipping combinations with rect, rrect, and path clips, multiple clip operations, and antialiasing in a grid layout.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::clipRect", "SkCanvas::clipRRect", "SkCanvas::clipPath", "SkPaint", "SkPath", "SkClipOp", "SkRRect"], "notes": "Systematic testing of clip types and operations; fully reproducible in SkiaSharp", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "complexclip3.cpp", "name": "Complex Clip 3", "description": "Exercises clip combinations with simple and complex paths, different clip operations, and both antialiased and binary clipping.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::clipPath", "SkPaint", "SkPath", "SkClipOp", "SkFont"], "notes": "Stress test for path clipping with fill type inversions; fully reproducible in SkiaSharp", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "convexpolyclip.cpp", "name": "Convex Polygon Clip", "description": "Tests clipping with various convex polygon shapes (triangles, hexagons, rotated rectangles) with both antialiased and non-antialiased modes, including text and image rendering.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::clipPath", "SkCanvas::clipRect", "SkCanvas::drawImage", "SkCanvas::drawPath", "SkCanvas::saveLayer", "SkShaders::RadialGradient"], "notes": "Core clipping functionality with various shapes; fully reproducible in SkiaSharp", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "crbug_1257515.cpp", "name": "Chromium Bug 1257515: Path Stroke Rendering", "description": "Tests path stroking with round joins and caps, rendering two SVG-derived paths with different stroke styles and transformations.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkPathBuilder", "SkPaint::setStrokeWidth", "SkPaint::setStrokeCap", "SkPaint::setStrokeJoin", "SkCanvas::drawPath", "SkCanvas::scale"], "notes": "Demonstrates standard path rendering with stroke customization; fully reproducible in SkiaSharp", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "crbug_224618.cpp", "name": "Chromium Bug 224618: 3D Perspective Panorama", "description": "Demonstrates 3D perspective transforms and matrix operations for a panorama viewer, showing 6 rotated faces with gradients and image rendering.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkM44", "SkMatrix", "SkCanvas::concat", "SkShaders::RadialGradient", "SkSurface", "SkCanvas::drawImageRect"], "notes": "Complex 3D geometry with perspective matrices; demonstrates advanced transformation techniques reproducible in SkiaSharp", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "crbug_691386.cpp", "name": "Crbug 691386 - SVG Path Arc Rendering", "description": "Tests parsing and rendering of SVG paths with arc commands, demonstrating path parsing from SVG strings with stroke styling.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkParsePath", "SkPath", "SkPaint", "SkCanvas"], "notes": "Tests SVG path parsing. SkiaSharp supports SkPath.ParseSvgPathData.", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "crbug_905548.cpp", "name": "Crbug 905548 - Chained Image Filters", "description": "Tests composition of multiple image filters (Image, Blur, Erode, Blend, Arithmetic) demonstrating complex filter pipelines.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas", "SkImageFilter", "SkImageFilters", "SkBlendMode", "SkSurface", "SkImage"], "notes": "Excellent example of chaining multiple image filters. Despite being a bug test, the filter composition pattern is high-value.", "sampleStatus": "similar", "matchedSample": "Blend Modes"}, {"file": "displacement.cpp", "name": "Displacement Map Filter", "description": "Demonstrates displacement mapping with various color channels, scale factors, and different sized displacement maps.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkImageFilters::DisplacementMap", "SkColorChannel", "SkImageFilters::Image"], "notes": "Tests displacement with negative scales and mismatched image sizes.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "drawatlascolor.cpp", "name": "Draw Atlas with Colors", "description": "Tests the drawAtlas API with various color values, blend modes, and transparency in the atlas texture.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawAtlas", "SkRSXform", "SkBlendMode", "SkSamplingOptions"], "notes": "Demonstrates atlas rendering technique; SkiaSharp has complete drawAtlas support", "sampleStatus": "similar", "matchedSample": "Blend Modes"}, {"file": "filltypes.cpp", "name": "Fill Types", "description": "Demonstrates all four path fill types (Winding, EvenOdd, InverseWinding, InverseEvenOdd) with overlapping circles at different scales and AA modes.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkPath::setFillType", "SkPathFillType", "SkCanvas::drawPath", "SkCanvas::clipRect", "SkPaint::setAntiAlias"], "notes": "Core fill type reference; directly reproducible via SKPath.FillType in SkiaSharp", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "filltypespersp.cpp", "name": "Fill Types with Perspective", "description": "Tests path fill types with perspective transformation and radial gradient shaders applied to overlapping circles.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkPath::setFillType", "SkShaders::RadialGradient", "SkMatrix::setPerspX", "SkCanvas::concat"], "notes": "Combines fill types with perspective and gradients; fully reproducible in SkiaSharp", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "glyph_pos.cpp", "name": "Glyph Positioning with Transforms", "description": "Tests glyph positioning under various transformations (uniform/non-uniform scale, skew, perspective) with hairline and non-hairline strokes.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkFont", "SkCanvas", "SkPaint", "SkMatrix"], "notes": "Tests text rendering under various matrix transforms; fully reproducible in SkiaSharp", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "hairlines.cpp", "name": "Hairlines", "description": "Tests rendering of hairline (single-pixel width) strokes including lines, curves, and cubic beziers with anti-aliasing at various widths and alpha values.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawPath", "SkPaint::setStrokeWidth", "SkPath", "SkPaint::setAntiAlias"], "notes": "Core drawing feature. Comprehensive hairline stroke testing.", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "hairmodes.cpp", "name": "Hair Modes", "description": "Demonstrates blend modes applied to hairline strokes with varying alpha values on raster surfaces, testing rendering of thin anti-aliased lines.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawLine", "SkPaint::setBlendMode", "SkShader", "SkBitmap", "SkCanvas::saveLayer"], "notes": "Core drawing feature showing blend mode interactions with hairlines. All APIs available in SkiaSharp.", "sampleStatus": "similar", "matchedSample": "Blend Modes"}, {"file": "hsl.cpp", "name": "HSL Blend Modes", "description": "Demonstrates Hue, Saturation, Color, and Luminosity blend modes with reference implementations and visual comparisons using gradients and images.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkBlendMode::kHue", "SkBlendMode::kSaturation", "SkBlendMode::kColor", "SkBlendMode::kLuminosity", "SkCanvas", "SkPaint", "SkShader"], "notes": "Advanced color blending. All HSL blend modes available in SkiaSharp.", "sampleStatus": "similar", "matchedSample": "Blend Modes"}, {"file": "imagemagnifier.cpp", "name": "Image Magnifier", "description": "Demonstrates the magnifier image filter with different zoom amounts, distortion (fish-eye), and boundary conditions for magnified content.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkImageFilters::Magnifier", "SkPaint::setImageFilter", "SkCanvas::saveLayer", "SkCanvas::clipRect"], "notes": "Tests magnifier filter bounds and distortion behavior with animation.", "sampleStatus": "similar", "matchedSample": "Photo Lab"}, {"file": "lumafilter.cpp", "name": "Luma Color Filter", "description": "Tests luma (luminosity) color filter applied to various shader combinations with different blend modes.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkLumaColorFilter::Make", "SkColorFilter", "SkGradientShader::MakeLinear", "SkBlendMode"], "notes": "Core color filter feature. Available in SkiaSharp via SKColorFilter.CreateLumaColor.", "sampleStatus": "similar", "matchedSample": "Blend Modes"}, {"file": "morphology.cpp", "name": "Morphology Filters (Dilate/Erode)", "description": "Demonstrates morphological image filters including dilate and erode operations with various radii and crop rectangles.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkImageFilters::Dilate", "SkImageFilters::Erode", "SkImage"], "notes": "Tests both dilate and erode with different radii values.", "sampleStatus": "similar", "matchedSample": "Photo Lab"}, {"file": "orientation.cpp", "name": "EXIF Image Orientation", "description": "Tests EXIF orientation tag handling when loading JPEG images with different chroma subsampling factors.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkImage", "SkCodec", "SkEncodedOrigin", "SkCanvas::drawImage"], "notes": "EXIF orientation supported in SkiaSharp. Important for real-world image handling.", "sampleStatus": "similar", "matchedSample": "Image Decoder"}, {"file": "patch.cpp", "name": "Patch Primitive Drawing", "description": "Demonstrates drawing cubic Bezier patches with color interpolation, texture mapping, and various blend modes.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawPatch", "SkGradientShader::MakeLinear", "SkPaint::setShader", "SkBlendMode"], "notes": "SkiaSharp supports drawPatch with colors, tex coords, and blend modes.", "sampleStatus": "similar", "matchedSample": "Blend Modes"}, {"file": "perspimages.cpp", "name": "Perspective Image Transforms", "description": "Tests image rendering under perspective transforms with various sampling modes (nearest, linear, mipmap, cubic) and constraint modes.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawImage", "SkCanvas::drawImageRect", "SkSamplingOptions", "SkMatrix::setPerspY", "SkCanvas::concat"], "notes": "Core image drawing with perspective. All sampling modes available in SkiaSharp.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "points.cpp", "name": "Point Drawing Modes", "description": "Demonstrates SkCanvas::drawPoints with various point modes (polygon, lines, points) and stroke styles.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawPoints", "SkPoint", "SkPaint", "SkMaskFilter::MakeBlur"], "notes": "Tests kPolygon_PointMode, kLines_PointMode, kPoints_PointMode with different stroke caps and mask filters.", "sampleStatus": "similar", "matchedSample": "Blur Image Filter"}, {"file": "polygons.cpp", "name": "Polygon Rendering", "description": "Tests rendering of various convex and concave polygons with different stroke widths, joins, and fill styles.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkPathBuilder", "SkPath", "SkPaint::kStroke_Style", "SkPaint::kFill_Style", "SkPaint::Join"], "notes": "Demonstrates stroke joins (miter, round, bevel), stroke-and-fill combinations on polygonal paths.", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "postercircle.cpp", "name": "Poster Circle 3D Transform", "description": "Demonstrates 3D perspective transformations with rotating circular arrangement of poster images.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkM44", "SkSurface", "SkMatrix::Perspective", "SkM44::Rotate", "SkCanvas::concat"], "notes": "Uses 4x4 matrices (SkM44) for 3D perspective projection and rotation of images around a ring.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "readpixels.cpp", "name": "Read Pixels", "description": "Tests readPixels functionality with various color types, alpha types, and color spaces from raster images, encoded images, and pictures.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkImage::readPixels", "SkCodec", "SkPictureRecorder", "SkColorSpace", "SkData"], "notes": "Uses GPU texture conversion for Ganesh backend but has raster fallback.", "sampleStatus": "similar", "matchedSample": "Image Decoder"}, {"file": "roundrects.cpp", "name": "Round Rectangles Rendering", "description": "Comprehensive test of round rectangle rendering with various radii, transformations, paint styles, and stroke widths including edge cases.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkRRect", "SkCanvas::drawRRect", "SkMatrix transforms", "SkShaders::RadialGradient", "SkPaint stroke properties"], "notes": "Extensive visual test covering many RRect rendering scenarios including edge cases.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "rrect.cpp", "name": "RRect Inset and Blur Tests", "description": "Tests various RRect inset algorithms and blur rendering differences between drawRRect and drawPath methods with pixel-level comparison.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkRRect", "SkCanvas::drawRRect", "SkPath::RRect", "SkMaskFilter::MakeBlur", "SkCanvas::readPixels"], "notes": "Includes sophisticated difference visualization between rendering methods using pixel-level comparison.", "sampleStatus": "similar", "matchedSample": "Blur Image Filter"}, {"file": "skbug_257.cpp", "name": "Skbug 257 - Large Coordinate Translation", "description": "Tests rendering with very large coordinate translations (225364 pixels) to verify correct handling of coordinates and precision across multiple draw types.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas", "SkPaint", "SkRect", "SkRRect", "SkPath", "SkTextBlob", "SkFont", "SkShader"], "notes": "Excellent for testing coordinate precision. Demonstrates various drawing primitives with large translations.", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "srcmode.cpp", "name": "Blend Mode Testing", "description": "Tests various blend modes (Src, SrcOver, Clear) with different paint configurations and primitives including lines, rects, ovals, and text.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkBlendMode", "SkPaint::setBlendMode", "SkShader", "SkCanvas::drawLine", "SkCanvas::drawRect", "SkCanvas::drawOval"], "notes": "Comprehensive test of blend modes with various geometry and fill patterns.", "sampleStatus": "similar", "matchedSample": "Blend Modes"}, {"file": "srgb.cpp", "name": "sRGB Color Space Handling", "description": "Demonstrates sRGB color filters including gamma conversion (LinearToSRGBGamma, SRGBToLinearGamma) and matrix color filters.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkColorFilters::Matrix", "SkColorFilters::LinearToSRGBGamma", "SkColorFilters::SRGBToLinearGamma", "SkPaint::setColorFilter"], "notes": "Demonstrates color space management and gamma correction capabilities.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "strokedlines.cpp", "name": "Stroked Lines with Shaders", "description": "Tests stroked lines with multiple shader types (solid, gradients, bitmap, dashing, blur) and matrix transforms.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawLine", "SkShader", "SkGradientShader", "SkDashPathEffect", "SkMaskFilter::MakeBlur", "SkMatrix"], "notes": "Comprehensive test of stroke rendering with complex shader and transformation scenarios.", "sampleStatus": "similar", "matchedSample": "Blur Image Filter"}, {"file": "tablemaskfilter.cpp", "name": "Table Mask Filter", "description": "Demonstrates table-based mask filter that remaps coverage values, drawing a path with modified coverage using a lookup table.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas", "SkPaint", "SkMaskFilter", "SkTableMaskFilter", "SkPath"], "notes": "Uses SkTableMaskFilter to customize antialiasing coverage; well-demonstrated accessible API.", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "tilemodes.cpp", "name": "Tile Modes for Bitmaps and Gradients", "description": "Comprehensive test of all tile modes (Clamp, Repeat, Mirror, Decal) applied to bitmap shaders and gradient shaders.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkBitmap", "SkShader", "SkTileMode", "SkShaders::LinearGradient", "SkShaders::RadialGradient", "SkShaders::SweepGradient"], "notes": "Excellent comprehensive demo of shader tile modes with visual comparisons.", "sampleStatus": "similar", "matchedSample": "Gradient"}, {"file": "tilemodes_alpha.cpp", "name": "Tile Modes with Alpha", "description": "Tests tile mode rendering (Clamp, Repeat, Mirror, Decal) with semi-transparent image shaders showing alpha interaction at tile boundaries.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkImage", "SkShader", "SkTileMode", "SkImage::makeShader", "SkMatrix"], "notes": "Visual demo of alpha blending with tile modes; tests Decal mode with transparency.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "widebuttcaps.cpp", "name": "Wide Butt Caps", "description": "Tests wide stroke cap rendering with different cap styles (bevel, round, miter) and path configurations for correct stroke rendering.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas", "SkPaint", "SkPath", "SkPathBuilder"], "notes": "Comprehensive stroke rendering test. All necessary APIs are available in SkiaSharp.", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "xfermodes.cpp", "name": "Xfermodes (Blend Modes)", "description": "Comprehensive test of all 29 blend modes with multiple source types including rectangles, images with alpha, scaled images, and layer masks.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas", "SkPaint", "SkBitmap", "SkImage", "SkBlendMode", "SkShader"], "notes": "Complete blend mode reference. All blend modes and drawing primitives supported in SkiaSharp.", "sampleStatus": "similar", "matchedSample": "Blend Modes"}, {"file": "colrv1.cpp", "name": "COLRv1", "description": "Comprehensive test of COLR v1 (Color Outline) font format with variable fonts, demonstrating gradients, transforms, compositing, clipping, and paint transformations in vector color fonts.", "interesting": "high", "apis_available": false, "missing_apis": ["COLR v1 font rendering", "SkTypeface_fontations", "COLRv1 glyph features", "SkFontArguments.VariationPosition for COLR v1"], "key_apis": ["SKFont", "SKCanvas.drawSimpleText", "SKTypeface", "SKFontArguments", "SKFontMetrics", "SKPaint"], "notes": "Tests the newer COLR v1 color font format which is bleeding-edge. While standard font/text APIs are available, SkiaSharp has limited or no COLR v1 support. This requires the SkTypeface_fontations module for full COLRv1 support, which is likely not available in SkiaSharp.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "emboss.cpp", "name": "Emboss Mask Filter", "description": "Demonstrates emboss effects using mask filters with various light directions, ambient, and specular values combined with color filters and blend modes.", "interesting": "high", "apis_available": false, "missing_apis": ["SkEmbossMaskFilter"], "key_apis": ["SkMaskFilter", "SkEmbossMaskFilter::Make", "SkBlurMask"], "notes": "Uses internal SkEmbossMaskFilter not exposed in SkiaSharp.", "sampleStatus": "similar", "matchedSample": "Blend Modes"}, {"file": "imagefilters.cpp", "name": "Core Image Filters", "description": "Comprehensive test suite for multiple image filters including blur, dilate, erode, color filters, matrix convolution, and drop shadows with blending modes.", "interesting": "high", "apis_available": false, "missing_apis": ["SkImageFilters::Shader"], "key_apis": ["SkImageFilters::Blur", "SkImageFilters::ColorFilter", "SkImageFilters::MatrixConvolution", "SkImageFilters::Dilate", "SkImageFilters::Erode", "SkImageFilters::DropShadow", "SkShaderMaskFilter"], "notes": "Uses SkImageFilters::Shader which is not exposed in SkiaSharp.", "sampleStatus": "similar", "matchedSample": "Blur Image Filter"}, {"file": "imagemakewithfilter.cpp", "name": "Image Make With Filter", "description": "Tests SkImages::MakeWithFilter() with a wide variety of image filters using different clip rects and subset regions.", "interesting": "high", "apis_available": false, "missing_apis": ["SkImages::MakeWithFilter (GPU context overload)"], "key_apis": ["SkImages::MakeWithFilter", "SkImageFilters::ColorFilter", "SkImageFilters::Blur", "SkImageFilters::DropShadow", "SkImageFilters::DisplacementMap", "SkImageFilters::Arithmetic"], "notes": "Stress test of many filters with MakeWithFilter. GPU paths tested.", "sampleStatus": "similar", "matchedSample": "Blur Image Filter"}, {"file": "p3.cpp", "name": "Display P3 Color Space", "description": "Comprehensive test of Display P3 (wide color) color space support, including gradient interpolation in P3 space, bitmap rendering, and color space transforms.", "interesting": "high", "apis_available": false, "missing_apis": ["SkColorSpace::MakeRGB with SkNamedGamut::kDisplayP3", "SkGradient::Interpolation::InPremul", "SkColor4f gradient colors"], "key_apis": ["SkColorSpace", "SkColorSpace::MakeRGB", "SkGradientShader::MakeLinear", "SkPaint::setColor4f", "SkCanvas::drawRect"], "notes": "Tests advanced wide color gamut support. SkiaSharp has limited Display P3 and gradient interpolation control.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "aaa.cpp", "name": "Analytic Antialiasing", "description": "Tests analytic antialiasing for rotated shapes, paths, and edge cases including inverse fill types and pixel boundary alignment.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawRect", "SkCanvas::drawCircle", "SkCanvas::drawPath", "SkCanvas::rotate", "SkPath::setFillType", "SkPaint::setAntiAlias"], "notes": "Tests internal antialiasing accuracy with various path edge cases", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "aaclip.cpp", "name": "Antialiased Clipping", "description": "Tests antialiased clipping behavior with various clipping scenarios including axis-aligned and offset rectangles, demonstrating clip+draw interactions.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::clipRect", "SkCanvas::drawRect", "SkCanvas::translate", "SkCanvas::save", "SkCanvas::restore", "SkPath::cubicTo"], "notes": "Includes cubic path clipping tests and platform-specific interop examples", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "aarectmodes.cpp", "name": "Antialiased Rect with Blend Modes", "description": "Tests antialiased rectangle drawing with various SkBlendMode combinations, demonstrating blend mode effects with different alpha values.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawRect", "SkCanvas::drawOval", "SkCanvas::saveLayer", "SkPaint::setBlendMode", "SkPaint::setAlpha"], "notes": "Tests antialiasing with various blend modes and alpha combinations", "sampleStatus": "similar", "matchedSample": "Blend Modes"}, {"file": "all_bitmap_configs.cpp", "name": "All Bitmap Color Configurations", "description": "Tests various bitmap color types and configurations including N32, RGB 565, ARGB 4444, RGBA F16, Alpha 8, and Gray 8 formats.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkBitmap", "SkCanvas::drawImage", "SkColorSpace::MakeSRGB", "SkFont"], "notes": "Tests rendering with different color types and alpha types (premul/unpremul)", "sampleStatus": "similar", "matchedSample": "Text Lab"}, {"file": "alpha_image.cpp", "name": "Alpha Image Rendering", "description": "Tests drawing of alpha-only images with color filters, mask filters, shaders, and verifies correct handling of alpha-only image shaders with paint alpha.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawImage", "SkColorFilter", "SkMaskFilter::MakeBlur", "SkShader", "SkImage::makeShader"], "notes": "Tests A8 (alpha-only) images with various paint properties", "sampleStatus": "similar", "matchedSample": "Blur Image Filter"}, {"file": "anisotropic.cpp", "name": "Anisotropic Image Scaling", "description": "Exercises anisotropic image scaling with different sampling options (linear, mip, aniso-16). Creates test image with radiating lines.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SKSamplingOptions", "SKCanvas.drawImageRect", "SKImage.withDefaultMipmaps", "SKShader", "SKSurface"], "notes": "Tests filtering quality for downsampled images. Educational for understanding sampling modes.", "sampleStatus": "similar", "matchedSample": "Shader Playground"}, {"file": "arcto.cpp", "name": "Arc To", "description": "Tests SVG-style arcTo path operations with various parameters and SVG path parsing. Multiple GM tests for different arc configurations.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SKPathBuilder.arcTo", "SKCanvas.drawPath", "SkParsePath"], "notes": "Demonstrates arcTo API and SVG path parsing. Educational for path operations.", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "backdrop.cpp", "name": "Backdrop Filter", "description": "Tests backdrop blur filters with clip rectangles and hint rectangles, demonstrating how backdrop effects respect clipping and scale factors during evaluation.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::saveLayer", "SkCanvas::clipRect", "SkGradientShader::MakeSweep", "SkImageFilters::Blur"], "notes": "Tests multi-layer backdrop filtering behavior", "sampleStatus": "similar", "matchedSample": "Blur Image Filter"}, {"file": "beziers.cpp", "name": "Random Bezier Paths", "description": "Draws randomly generated quadratic and cubic bezier curves with varying stroke widths and colors.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkPathBuilder", "SkPath", "SkCanvas::drawPath", "SkPaint"], "notes": "Good example of bezier curve drawing with random generation", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "bitmapimage.cpp", "name": "Bitmap Image sRGB Legacy", "description": "Tests color space handling by drawing the same image and decoded bitmap on both legacy (linear) and sRGB canvases to verify color management.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SKImage", "SKBitmap", "SKSurface", "SKCanvas.drawImage", "SKImageInfo", "SKColorSpace"], "notes": "Tests interaction between color space aware rendering and legacy canvas behavior.", "sampleStatus": "similar", "matchedSample": "Image Decoder"}, {"file": "bitmaprect.cpp", "name": "Bitmap Rect", "description": "Tests drawImageRect with various source and destination rectangles, scaling scenarios, and edge precision handling.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SKCanvas.drawImageRect", "SKImage", "SKRect", "SKSamplingOptions", "SKShader", "SKGradient"], "notes": "Comprehensive test of image scaling and rect-based drawing; includes GPU tiling edge cases.", "sampleStatus": "similar", "matchedSample": "Gradient"}, {"file": "bitmaptiled.cpp", "name": "Bitmap Tiled Drawing", "description": "Tests drawing of tiled bitmaps with fractional offsets to ensure proper tile alignment without gaps, exercising bitmap tiling approaches.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawImageRect", "SkImage", "SkBitmap", "SkSamplingOptions", "SkMatrix"], "notes": "GPU-focused test with manual tiling fallback", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "bug6643.cpp", "name": "Bug 6643 - Sweep Gradient with Picture Shader", "description": "Tests sweep gradient applied to recorded drawing as a picture shader with repeat tiling and color interpolation.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SKCanvas", "SKPaint", "SKPicture", "SKShader", "SKGradient", "SKTileMode", "SKFilterMode"], "notes": "Demonstrates advanced shader composition with gradient-to-picture conversion and tiling", "sampleStatus": "similar", "matchedSample": "Gradient"}, {"file": "bug6783.cpp", "name": "Bug 6783 - Repeat Tile Mode Sampling", "description": "Tests image sampling with repeat and mirror tile modes at various scales and skew transforms to validate tile boundary artifacts.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas", "SkImage", "SkPaint", "SkShader", "SkSurface", "SkTileMode", "SkMatrix"], "notes": "Tests repeat/mirror tile mode edge handling. Good API usage example.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "circularclips.cpp", "name": "Circular Clips", "description": "Tests clipping with circular paths in different combinations (intersection and difference operations) with various fill types.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SKCanvas.ClipPath", "SKPath", "SKClipOp"], "notes": "Uses path-based clipping with union and difference operations to test clip behavior.", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "clip_error.cpp", "name": "Clip Error (Text Rendering)", "description": "Tests that glyphs too large for the atlas are correctly translated and clipped when rendered with text blobs.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SKCanvas.DrawTextBlob", "SKTextBlob", "SKMaskFilter.MakeBlur", "SKFont"], "notes": "Regression test for text rendering with large glyphs and blur effects under clipping.", "sampleStatus": "similar", "matchedSample": "Blur Image Filter"}, {"file": "closedcappedhairlines.cpp", "name": "Closed Capped Hairlines", "description": "Tests rendering closed and open contours with capped hairlines, testing different cap styles (butt, round, square) on pixel-aligned and offset paths.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SKCanvas.DrawPath", "SKPathBuilder", "SKPaint.StrokeCap", "SKSurface.Raster"], "notes": "Tests edge cases of hairline rendering with different cap styles and sub-pixel positioning.", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "colorwheel.cpp", "name": "Color Wheel", "description": "Tests image decoders for proper color channel decoding with the same image in multiple formats (PNG, GIF, WEBP, JPEG, AVIF), plus native text rendering and alpha type conversions.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SKImage.makeShader", "SKFont", "SKCanvas.drawString", "SKImage.makeColorSpace", "SKAlphaType (Premul, Unpremul)", "SKSamplingOptions"], "notes": "Tests image decoding and alpha handling. All core APIs are available; AVIF support depends on SK_CODEC_DECODES_AVIF build flag.", "sampleStatus": "similar", "matchedSample": "GIF Player"}, {"file": "complexclip4.cpp", "name": "Complex Clip 4", "description": "Tests device-space clip restrictions and emulated clip replace operations for Android framework compatibility.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::clipRect", "SkCanvas::clipRRect", "SkCanvas::clipPath", "SkPaint", "SkClipOp"], "notes": "Android-specific device clip restriction behavior; core operations available in SkiaSharp", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "crbug_1113794.cpp", "name": "Chromium Bug 1113794: Dash Path Effect", "description": "Tests dash path effect rendering with specific matrix transforms and stroke settings on a vertical line.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkDashPathEffect::Make", "SkPath", "SkPaint", "SkCanvas::drawPath", "SkMatrix", "SkCanvas::concat"], "notes": "Regression test for chromium bug; dash path effect is available in SkiaSharp", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "crbug_1156804.cpp", "name": "Chromium Bug 1156804: Blur Filter Edge Handling", "description": "Tests blur filter behavior with different border settings and blur sigmas, specifically handling transparent padding and crop filters.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkImageFilters::Blur", "SkImageFilters::Crop", "SkPaint", "SkCanvas::drawRect", "SkTileMode"], "notes": "Regression test for chromium bug; blur and crop filters available in SkiaSharp", "sampleStatus": "similar", "matchedSample": "Blur Image Filter"}, {"file": "crbug_788500.cpp", "name": "Chromium Bug 788500: Degenerate Path Rendering", "description": "Tests rendering of a degenerate path with even-odd fill type and multiple moveTo commands followed by a cubic curve.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkPathBuilder", "SkPathFillType", "SkPath::moveTo", "SkPath::cubicTo", "SkCanvas::drawPath"], "notes": "Regression test for chromium bug; standard path drawing APIs available in SkiaSharp", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "dashcubics.cpp", "name": "Dashed Cubic Paths", "description": "Tests complex SVG paths with cubic segments rendered with dash patterns, trim path effects, and various join styles.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkDashPathEffect::Make", "SkTrimPathEffect::Make", "SkParsePath::FromSVGString", "SkCanvas::drawPath"], "notes": "Demonstrates path effects combined with cubic curves; available in SkiaSharp", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "degeneratesegments.cpp", "name": "Degenerate Path Segments", "description": "Stress test for path rendering with degenerate segments (zero-length lines, quads, cubics) combined with various fill types, stroke styles, caps and joins.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkPathBuilder", "SkCanvas::drawPath", "SkCanvas::clipRect", "SkPaint::setStrokeCap", "SkPaint::setStrokeJoin"], "notes": "Comprehensive test of zero-length segment edge cases; fully reproducible in SkiaSharp", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "discard.cpp", "name": "Discard Surface", "description": "Tests SkSurface::discard() method by repeatedly discarding and redrawing offscreen surfaces.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkSurface", "SkCanvas", "SkShader", "SkPaint"], "notes": "Surface lifecycle test; discard() may not be directly exposed in SkiaSharp but core surface APIs are available", "sampleStatus": "similar", "matchedSample": "Shader Playground"}, {"file": "drawminibitmaprect.cpp", "name": "Draw Mini Bitmap Rect", "description": "Calls drawImageRect multiple times with the same texture at various scales and rotations to test draw op combining.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawImageRect", "SkImage", "SkSamplingOptions", "SkCanvas::rotate"], "notes": "GPU performance test for draw op batching; core APIs available in SkiaSharp", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "encode_color_types.cpp", "name": "Encode Color Types", "description": "Tests WebP encoding and decoding of images across multiple color types and alpha configurations including grayscale and opaque variants.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkWebpEncoder", "SkEncodedImageFormat", "SkImage", "SkSurface"], "notes": "SkiaSharp supports WebP encoding; comprehensive color type matrix test", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "encode_srgb.cpp", "name": "Encode sRGB", "description": "Tests encoding (PNG/WebP/JPEG) of images across multiple color types, alpha types, and color spaces (sRGB and null).", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkPngEncoder", "SkWebpEncoder", "SkJpegEncoder", "SkColorSpace", "SkBitmap"], "notes": "Tests sRGB color space handling in encoding pipeline; SkiaSharp supports these encoders", "sampleStatus": "similar", "matchedSample": "Image Decoder"}, {"file": "filterfastbounds.cpp", "name": "Image Filter Fast Bounds", "description": "Visualizes fast bounds computation for various image filter combinations with different geometry types (rect, oval, rrect, drrect, path, points, bitmap).", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkImageFilters::Blur", "SkImageFilters::Offset", "SkImageFilters::DropShadow", "SkPaint::computeFastBounds", "SkCanvas::saveLayer"], "notes": "Tests image filter bounds calculation; variety of filter types available in SkiaSharp", "sampleStatus": "similar", "matchedSample": "Blur Image Filter"}, {"file": "flippity.cpp", "name": "Flippity", "description": "Exercises drawImage with complex transformations including flips, rotations, and perspective matrices; tests image origin handling.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawImage", "SkCanvas::drawImageRect", "SkMatrix", "SkImage", "SkSamplingOptions"], "notes": "GPU texture origin handling aspect is GPU-specific, but basic transforms available in SkiaSharp", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "highcontrastfilter.cpp", "name": "High Contrast Filter", "description": "Tests SkHighContrastFilter with various configurations (grayscale, invert brightness/lightness, contrast adjustment) applied to gradients and text.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkHighContrastFilter::Make", "SkColorFilter", "SkCanvas", "SkShader", "SkFont", "SkCanvas::saveLayer"], "notes": "Color filter feature. Available in SkiaSharp via SKColorFilter.CreateHighContrast.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "imageresizetiled.cpp", "name": "Image Resize Tiled", "description": "Tests tiled scaling of text using matrix transform filter and tiled clip regions.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkImageFilters::MatrixTransform", "SkCanvas::saveLayer", "SkCanvas::clipRect", "SkCanvas::scale"], "notes": "Simple demonstration of matrix transform filter applied to text in tiled regions.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "inverseclip.cpp", "name": "Inverse Clip", "description": "Tests inverse clipping with a cubic path using kInverseWinding fill type to draw shapes clipped by the inverse of a rounded path.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::clipPath", "SkPathFillType::kInverseWinding", "SkPathBuilder"], "notes": "Regression test for skbug.com/40040760 involving inverse clip paths.", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "jpg_color_cube.cpp", "name": "JPG Color Cube", "description": "Creates a 512x512 color cube visualization by encoding a full RGB color space as JPEG data and then drawing the decoded image.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkJpegEncoder::Encode", "SkImages::DeferredFromEncodedData", "SkCanvas::drawImage"], "notes": "Tests JPEG encoding and deferred image decoding with full RGB color space.", "sampleStatus": "similar", "matchedSample": "Image Decoder"}, {"file": "lcdoverlap.cpp", "name": "LCD Text Overlap", "description": "Tests LCD text rendering when glyphs overlap and rotate with different blend modes, examining subpixel antialiasing behavior.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkFont::setSubpixel", "SkFont::setEdging", "SkTextBlob", "SkBlendMode"], "notes": "Tests interaction of LCD text rendering with overlapping glyphs.", "sampleStatus": "similar", "matchedSample": "Blend Modes"}, {"file": "mandoline.cpp", "name": "Mandoline Path Slicer", "description": "Demonstrates complex path subdivision with sliver-shaped contours created by recursively chopping cubic, quadratic, conic, and line segments.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkPathBuilder", "SkPath", "SkCanvas::drawPath"], "notes": "Pure CPU path manipulation. SkiaSharp supports these core path APIs.", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "mirrortile.cpp", "name": "Mirror Tile Mode", "description": "Tests image shader mirror tile mode with various scaling factors, filter modes, and half-pixel offsets.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkImage::makeShader", "SkTileMode::kMirror", "SkSamplingOptions", "SkFilterMode"], "notes": "SkiaSharp has full tile mode support including Mirror.", "sampleStatus": "similar", "matchedSample": "Shader Playground"}, {"file": "nearesthalfpixelimage.cpp", "name": "Nearest Half Pixel Image Filtering", "description": "Tests how images with nearest filtering behave when drawn at half-pixel offsets, examining rasterization and sample snapping at boundary points.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkImage", "SkSurface", "SkCanvas::drawImage", "SkCanvas::drawRect", "SkFilterMode", "SkPixmap"], "notes": "CPU-only test demonstrating subtle pixel filtering behavior. All APIs available in SkiaSharp.", "sampleStatus": "similar", "matchedSample": "Photo Lab"}, {"file": "ninepatch_stretch.cpp", "name": "Nine-Patch Stretching", "description": "Demonstrates nine-patch image stretching and scaling with fixed corner regions and stretchable center areas.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas", "SkBitmap", "SkImage", "SkPaint"], "notes": "File not found in google/skia repository (may have been removed or renamed). SkiaSharp has DrawImageNinePatch support.", "sampleStatus": "similar", "matchedSample": "Nine-Patch Scaler"}, {"file": "palette.cpp", "name": "Font Color Palette", "description": "Tests COLR v1 font color palette support with palette overrides and individual palette entry modifications in color fonts.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkTypeface", "SkFont", "SkFontArguments::Palette", "SkCanvas::drawSimpleText"], "notes": "Advanced font feature. COLR v1 support available through SkiaSharp typeface API.", "sampleStatus": "similar", "matchedSample": "Color Fonts"}, {"file": "picture.cpp", "name": "Picture Drawing Variants", "description": "Tests drawing pictures with various combinations of matrix transforms and paint parameters, including alpha values and cull rect handling.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas", "SkPicture", "SkPictureRecorder"], "notes": "Tests basic picture drawing API with transforms and paint.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "plus.cpp", "name": "Plus Blend Mode Anti-aliasing", "description": "Demonstrates how the Plus blend mode merges anti-aliased edges when compositing overlapping shapes.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkBlendMode::kPlus", "SkPath", "SkCanvas::drawPath", "SkPaint::setAntiAlias"], "notes": "Tests antialiasing behavior with Plus blend mode for seam elimination in overlapped geometry.", "sampleStatus": "similar", "matchedSample": "Blend Modes"}, {"file": "preservefillrule.cpp", "name": "Fill Rule Preservation", "description": "Tests that fill rules (winding vs. even-odd) are properly preserved for star paths in cached rendering.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkPath::setFillType", "SkPathFillType::kWinding", "SkPathFillType::kEvenOdd", "SkMatrix::Translate"], "notes": "Regression test for CCPR path cache fill rule preservation; GPU-backend specific.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "rect_poly_stroke.cpp", "name": "Rectangle vs Path Stroke Comparison", "description": "Compares drawing rectangles directly vs as paths with various stroke joins, rotations, and fill modes.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawRect", "SkCanvas::drawPath", "SkPath::Rect", "SkPaint stroke properties"], "notes": "Tests stroke rendering consistency between rect and path drawing methods.", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "repeat_tile.cpp", "name": "Repeat Tile Shader", "description": "Demonstrates tiling and repeating patterns using shaders with various repetition modes for image and pattern fills.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkShader", "SkCanvas", "SkPaint", "SkImage", "SkTileMode"], "notes": "File not found in google/skia repository (may have been removed or renamed). Tiling modes available through SKShader in SkiaSharp.", "sampleStatus": "similar", "matchedSample": "Shader Playground"}, {"file": "savelayer.cpp", "name": "SaveLayer", "description": "Tests various saveLayer scenarios including initialization from previous layers, behind-drawing, F16 color support, and optimization edge cases.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::saveLayer", "SkCanvas::SaveLayerRec", "kInitWithPrevious_SaveLayerFlag", "SkBlendMode", "SkImageFilter"], "notes": "Tests saveLayer semantics and optimization edge cases; some tests are GPU-specific.", "sampleStatus": "similar", "matchedSample": "Blend Modes"}, {"file": "shapes.cpp", "name": "Shapes", "description": "Tests rendering of primitive shapes (rectangles, ovals, rounded rectangles, DRRect) with rotations and nested shape tests for double-blending artifacts.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkRRect", "SkCanvas::drawRect", "SkCanvas::drawOval", "SkCanvas::drawRRect", "SkCanvas::drawDRRect"], "notes": "Basic shape rendering with focus on pixel-perfect blending. All APIs available in SkiaSharp.", "sampleStatus": "similar", "matchedSample": "3D Transforms"}, {"file": "simpleaaclip.cpp", "name": "Simple AA Clip", "description": "Tests anti-aliased clipping operations (difference and intersect) using rectangles, paths, and SkAAClip objects with visual comparison.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkAAClip", "SkPath", "SkCanvas::clipPath", "SkCanvas::clipRect", "SkClipOp"], "notes": "Clipping functionality is available in SkiaSharp. Tests boolean operations on clipped regions.", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "skbug_5321.cpp", "name": "Skbug 5321 - Unicode Text Positioning", "description": "Tests positioning of Unicode text combining characters using both simple and positioned text drawing methods.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas", "SkFont", "SkTextBlob", "SkTextBlobBuilder", "SkPaint"], "notes": "Tests Unicode combining character support. Demonstrates SkTextBlobBuilder usage.", "sampleStatus": "similar", "matchedSample": "Text Lab"}, {"file": "smallarc.cpp", "name": "Small Arc at Scale", "description": "Tests rendering of small cubic bezier arc paths scaled up 8x, verifying correct edge rendering for small magnified shapes.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkPath", "SkPathBuilder", "SkCanvas::scale", "SkCanvas::drawPath"], "notes": "Tests stroke rendering at extreme magnification.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "smallcircles.cpp", "name": "Small Circles in Offscreen Surface", "description": "Renders many tiny circles (radius 0.8) in an offscreen surface then scales the result 7x to test small primitive quality.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawArc", "SkSurface", "SkImage", "SkCanvas::scale"], "notes": "Tests small primitive rendering and offscreen composition.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "spritebitmap.cpp", "name": "Sprite Bitmap and Image Filtering", "description": "Compares drawSprite and drawBitmap with clipping and image filters, particularly blur filters with subpixel translations.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawImage", "SkCanvas::drawImageRect", "SkBitmap", "SkImageFilter", "SkImageFilters::Blur", "SkShader"], "notes": "Tests both CPU and GPU backends for correct filtering behavior with subpixel coordinates.", "sampleStatus": "similar", "matchedSample": "Blur Image Filter"}, {"file": "stlouisarch.cpp", "name": "Hairline Quadratic/Cubic/Conic Paths", "description": "Tests hairline (zero-width) stroked paths with quadratic, cubic, and conic curves including degenerate cases at large scale.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkPath", "SkPathBuilder", "quadTo", "cubicTo", "conicTo", "setStrokeWidth(0)"], "notes": "Tests edge cases in path stroking and rendering at various scales.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "strokerect.cpp", "name": "Stroked Rectangles with Joins", "description": "Tests stroke rendering for rectangles using different join styles (miter, round, bevel) with stroke-only and stroke-and-fill modes.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkPath::Rect", "SkCanvas::drawRect", "SkPaint::setStrokeJoin", "SkPaint::setStrokeWidth"], "notes": "Comprehensive stroke geometry testing for rectangles.", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "strokes.cpp", "name": "Comprehensive Stroke Rendering", "description": "Multiple GMs testing stroke rendering: random ovals/rrects, various path types, zero-length strokes, tiny strokes, dashed lines, and join edge cases.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawOval", "SkCanvas::drawRoundRect", "SkCanvas::drawPath", "SkPath", "SkDashPathEffect", "SkPaint::setStrokeCap"], "notes": "Large suite of stroke tests covering various path types and degenerate cases.", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "tinybitmap.cpp", "name": "Tiny Bitmap Shader", "description": "Tests shader rendering with a 1x1 bitmap used as a repeating/mirrored texture pattern. Demonstrates bitmap shader tiling modes with very small source images.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkBitmap", "SkPaint", "SkShader", "SkTileMode"], "notes": "Uses kRepeat and kMirror with a 1x1 bitmap.", "sampleStatus": "similar", "matchedSample": "Shader Playground"}, {"file": "transparency.cpp", "name": "Transparency Checkerboard", "description": "Verifies transparent bitmap rendering over a checkerboard pattern by creating gradients with varying opacity across different colors.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkBitmap", "SkPaint", "SkCanvas", "SkShader", "SkSurface", "SkGradientShader"], "notes": "Creates checkerboard shader and transparency gradients. Tests alpha blending on 256x9 surface scaled 7x120.", "sampleStatus": "similar", "matchedSample": "Gradient"}, {"file": "typeface.cpp", "name": "Typeface Rendering & Styling", "description": "Comprehensive test of font rendering with different styles, hinting levels, edging modes, subpixel positions, transformations, fill/stroke styles, and blur effects.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkFont", "SkTypeface", "SkTextBlob", "SkMaskFilter", "SkFontStyle"], "notes": "Tests kerning, embedded bitmaps, GASP table features, and multiple font styles.", "sampleStatus": "similar", "matchedSample": "Blur Image Filter"}, {"file": "unpremul.cpp", "name": "Unpremultiplied Alpha", "description": "Tests drawing with unpremultiplied alpha color type using SkBlendMode::kSrc to verify correct alpha handling and pixel-level accuracy.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkBitmap", "SkPaint", "SkBlendMode", "SkImageInfo", "SkColorSpace"], "notes": "Tests unpremultiplied alpha format (kUnpremul_SkAlphaType). Uses readPixels for verification.", "sampleStatus": "similar", "matchedSample": "Blend Modes"}, {"file": "xfermodes3.cpp", "name": "Xfermodes3 (Stroke Variant)", "description": "Tests blend modes with solid colors and bitmap shaders over a checkerboard background, demonstrating transfer modes with different stroke styles.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas", "SkPaint", "SkShader", "SkBlendMode", "SkBitmap", "SkFont"], "notes": "Tests all blend modes with filled and stroked rectangles.", "sampleStatus": "similar", "matchedSample": "Blend Modes"}, {"file": "userfont.cpp", "name": "Custom Typeface", "description": "Demonstrates creating a custom typeface using SkCustomTypefaceBuilder with drawable-based glyphs, serialization, and deserialization.", "interesting": "medium", "apis_available": false, "missing_apis": ["SkCustomTypefaceBuilder"], "key_apis": ["SkFont", "SkTypeface", "SkPath", "SkPictureRecorder", "SkTextBlob", "SkCustomTypefaceBuilder"], "notes": "Uses SkCustomTypefaceBuilder API not available in SkiaSharp.", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "workingspace.cpp", "name": "Working Color Space", "description": "Tests color space handling for shaders and color filters using runtime effects with working color space transformations across sRGB, linear, and custom spaces.", "interesting": "medium", "apis_available": false, "missing_apis": ["SkRuntimeEffect", "working color space shader APIs"], "key_apis": ["SkCanvas", "SkPaint", "SkShader", "SkColorFilter", "SkColorSpace", "SkRuntimeEffect"], "notes": "Uses SkRuntimeEffect which SkiaSharp does not fully expose.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "b_119394958.cpp", "name": "Batched Circle & Arc Rendering Bug", "description": "Regression test for a bug where stroked arcs with round caps were incorrectly batched with filled circles, causing vertex data corruption.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawCircle", "SkCanvas::drawArc", "SkPaint", "SkRect"], "notes": "GPU batching bug regression test. Not visually interesting.", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "badpaint.cpp", "name": "Bad Paint Rendering", "description": "Tests that invalid paints (empty bitmap shaders, non-invertible matrices) render safely as no-ops without crashing.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkPaint", "SkShader", "SkMatrix"], "notes": "Edge case/regression test for robustness", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "bigrect.cpp", "name": "Big Rects", "description": "Tests drawing large rectangles with various sizes and clipping configurations to verify correct edge handling for rectangles that exceed int32 and SkFixed ranges.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SKCanvas.clipRect", "SKCanvas.drawRect", "SKCanvas.translate", "SKPaint.setColor", "SKPaint.setStyle", "SKPaint.setStrokeWidth", "SKPaint.setAntiAlias"], "notes": "Edge case testing for rendering behavior with extreme coordinate values.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "bitmappremul.cpp", "name": "Bitmap Premultiplication", "description": "Verifies correct unpremultiplication of bitmap pixels when converting to other formats, including edge cases with out-of-gamut colors.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SKBitmap", "SKImage", "SKCanvas.drawImage", "SKBlendMode", "SKPaint.setBlendMode", "SKAlphaType"], "notes": "Regression test for alpha channel premultiplication/unpremultiplication logic.", "sampleStatus": "similar", "matchedSample": "Blend Modes"}, {"file": "bitmaprecttest.cpp", "name": "Bitmap Rect Test", "description": "Regression test for bitmap shader fast-path scaling issues, ensuring correct pixel rendering without duplication.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SKCanvas.drawImage", "SKCanvas.drawImageRect", "SKImage", "SKPath"], "notes": "Specific regression test for internal bitmap shader optimization issue.", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "bug12866.cpp", "name": "Bug 12866 - Stroke Path with Large ResScale", "description": "Regression test for incorrect path stroking when large perspective scales force high resolution scaling, producing invalid filled paths.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SKCanvas", "SKPaint", "SKPath", "SKMatrix"], "notes": "Bug regression test for skbug.com/40043963; also includes related bugs 40810065 (cubic) and 41422450 (conic)", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "bug5252.cpp", "name": "Bug 5252 - Clipping with Oval Path", "description": "Regression test for an issue with clipping using oval-shaped paths while drawing rectangles and cubic paths.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SKCanvas", "SKPaint", "SKPath"], "notes": "Tests edge case in clip path rendering; demonstrates canvas save/restore with local transforms", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "bug530095.cpp", "name": "Bug 530095 - Dash Path Effect with Various Scales", "description": "Tests dash path effects at different stroke widths and canvas scales to ensure proper dash pattern rendering across scale factors.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SKCanvas", "SKPaint", "SKPath", "SKPathEffect"], "notes": "Tests dash effect scaling and phase behavior; includes bug 591993 for dash rendering consistency", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "bug615686.cpp", "name": "Bug 615686 - Stroked Cubic Path", "description": "Regression test for drawing a cubic bezier path with stroke styling to verify correct stroke rendering on curved paths.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SKCanvas", "SKPaint", "SKPath"], "notes": "Simple stroke rendering regression test; tests cubic bezier stroke behavior", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "bug9331.cpp", "name": "Bug 9331 - Dash Effect with Clipping", "description": "Regression test for inconsistent dash path rendering between debug and release builds when applied with clip rectangles.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SKCanvas", "SKPaint", "SKPathEffect"], "notes": "Bug regression test for skbug.com/40040651; tests dash rendering consistency across build configurations", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "crbug_1086705.cpp", "name": "Crbug 1086705 - Dense Circle Stroke", "description": "Regression test for stroke rendering on very-near duplicate vertices; draws a thin circle with thick stroke.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas", "SkPaint", "SkPath"], "notes": "Bug regression test; GPU path rendering with near-duplicate vertices.", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "crbug_1139750.cpp", "name": "Chromium Bug 1139750: RRect Stroke Edge AA", "description": "GPU regression test where elliptical round-rect rendering with non-square scaling and stroke width produces infinity in the shader.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawRRect", "SkRRect::MakeRectXY", "SkPaint", "SkCanvas::scale"], "notes": "GPU-backend-specific regression test for chromium bug", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "crbug_1313579.cpp", "name": "Chromium Bug 1313579: Backdrop Blur Clamp Artifact", "description": "Tests backdrop blur image filter with near-integer scale-and-translate matrices to detect color bleed artifacts from clamp mode.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkImageFilters::Blur", "SkMatrix", "SkCanvas::concat", "SkCanvas::clipIRect", "SkCanvas::saveLayer"], "notes": "Regression test for chromium bug; GPU-specific rendering artifact", "sampleStatus": "similar", "matchedSample": "Blur Image Filter"}, {"file": "crbug_884166.cpp", "name": "Crbug 884166 - Path Self-Intersection", "description": "Tests rendering of self-intersecting paths with fill style to verify correct winding number calculation and fill behavior.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkPathBuilder", "SkPath", "SkPaint", "SkCanvas"], "notes": "Bug regression test; tests complex fill behavior with self-intersecting paths.", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "crbug_887103.cpp", "name": "Crbug 887103 - Multi-Contour Paths", "description": "Tests rendering of paths with multiple disconnected contours and complex line segments using fill style.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkPathBuilder", "SkPath", "SkPaint", "SkCanvas"], "notes": "Bug regression test; demonstrates multi-contour path rendering.", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "crbug_892988.cpp", "name": "Crbug 892988 - Blend Mode with AA Clipping", "description": "Tests interaction between anti-aliased stroking, clipping bounds, and blend modes (kSrc), verifying AA bloat handling with clips.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas", "SkPaint", "SkBlendMode", "SkRect"], "notes": "Bug regression test; GPU-specific dual source blending. Tests AA and clipping interaction.", "sampleStatus": "similar", "matchedSample": "Blend Modes"}, {"file": "crbug_899512.cpp", "name": "Crbug 899512 - Blur with Matrix Transform", "description": "Tests blur mask filter combined with matrix transformation and color filters, demonstrating interaction between transforms and blur effects.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas", "SkPaint", "SkMaskFilter", "SkColorFilter", "SkMatrix"], "notes": "Bug regression test; blur with complex transformations and color filters.", "sampleStatus": "similar", "matchedSample": "Blur Image Filter"}, {"file": "crbug_947055.cpp", "name": "Crbug 947055 - Perspective Rectangle AA", "description": "Tests perspective-transformed rectangle rendering with anti-aliasing to verify correct AA behavior on perspective-distorted edges.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas", "SkPaint", "SkRect", "SkMatrix"], "notes": "Bug regression test; GPU-specific AA with perspective transforms.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "crbug_996140.cpp", "name": "Crbug 996140 - Scaled Arc Path", "description": "Tests rendering of small arcs with extreme scaling transformations, verifying correctness when scales are very large relative to geometry size.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas", "SkPaint", "SkPath", "SkPathBuilder", "SkRect"], "notes": "Bug regression test; arc rendering with extreme scaling.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "daa.cpp", "name": "Delta-based Anti-Aliasing Test", "description": "Tests the delta-based AA rasterizer with edge case scenarios involving adjacent and overlapping paths with different fill types.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkPathBuilder::addPolygon", "SkCanvas::drawPath", "SkPaint::setColor"], "notes": "Internal rendering algorithm test for DAA rasterizer", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "encode_platform.cpp", "name": "Encode Platform", "description": "Tests encoding of images in PNG, JPEG, and WebP formats with opaque, premultiplied, and unpremultiplied alpha types.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkPngEncoder", "SkJpegEncoder", "SkWebpEncoder", "SkImage", "SkPixmap"], "notes": "Platform-specific encoding regression test; SkiaSharp supports all three formats", "sampleStatus": "similar", "matchedSample": "Image Decoder"}, {"file": "labyrinth.cpp", "name": "Labyrinth Maze Coverage", "description": "A regression test for stroke coverage issues with different cap styles when drawing a complex maze pattern using overlapping strokes.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawPath", "SkPaint::setStrokeCap", "SkPaint::setStrokeWidth", "SkPathBuilder"], "notes": "Bug regression test for Chromium issue #913223.", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "recordopts.cpp", "name": "Picture Recording Optimization", "description": "Tests alpha folding optimization in picture recording, verifying opacity layer optimizations do not change observable colors using detector color filters.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas", "SkPicture", "SkPictureRecorder", "SkColorFilter", "SkImageFilter"], "notes": "Internal optimization stress test for recording.", "sampleStatus": "similar", "matchedSample": "Photo Lab"}, {"file": "rrectclipdrawpaint.cpp", "name": "RRect Clip Draw Paint", "description": "Tests GPU optimization of rrect clip combined with drawPaint operations with matrix transformations and gradients.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkRRect", "SkCanvas::clipRRect", "SkCanvas::drawPaint", "SkMatrix", "SkShaders::LinearGradient", "SkShaders::RadialGradient"], "notes": "GPU backend-specific regression test for Skia's SurfaceDrawContext optimization.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "rrects.cpp", "name": "Rounded Rectangles Clip and Draw", "description": "Comprehensive test of rounded rectangles in various configurations including clipping, drawing, and GPU fragment processor effects.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkRRect", "SkRRect::setRectXY", "SkRRect::setRectRadii", "SkCanvas::clipRRect", "SkCanvas::drawRRect", "SkMatrix"], "notes": "Includes GPU-specific effect type tests (GrRRectEffect) which are backend-specific stress tests.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "skbug1719.cpp", "name": "Skbug 1719 - Soft Clip with Blur", "description": "Tests anti-aliased blurred paths rendered through soft clip masks, ensuring proper texture usage without conflicts on GPU backend.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas", "SkPaint", "SkPath", "SkMaskFilter", "SkColorFilter"], "notes": "Bug regression test; GPU-specific soft clip + blur texture conflict.", "sampleStatus": "similar", "matchedSample": "Blur Image Filter"}, {"file": "skbug_4868.cpp", "name": "Skbug 4868 - PDF Large Coordinates", "description": "Tests clipping and line drawing with very large coordinates to verify PDF export handles float rounding correctly.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas", "SkPaint", "SkRect"], "notes": "Bug regression test; PDF-specific float rounding with large coordinates.", "sampleStatus": "similar", "matchedSample": "PDF Composer"}, {"file": "skbug_8664.cpp", "name": "Skbug 8664 - Mipmap with Scissor", "description": "Tests mipmap generation during downscaled image rendering with scissor clipping, verifying scissor/mipmap interaction on mobile GPUs.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas", "SkImage", "SkSamplingOptions", "SkPaint"], "notes": "Bug regression test; GPU-specific for Adreno 330 mipmap + scissor interaction.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "skbug_8955.cpp", "name": "Skbug 8955 - Text Blob Caching", "description": "Tests rendering the same text blob twice with a zero scale transform in between, ensuring proper cache invalidation when matrix is restored.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas", "SkFont", "SkPaint", "SkTextBlob"], "notes": "Bug regression test; text blob caching behavior.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "strokefill.cpp", "name": "Stroked Rectangles Regression", "description": "Tests stroking behavior for rectangles with various dimensions (normal, small, empty, inverted) using different join types.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkPath::Rect", "SkPaint::setStrokeJoin", "SkPaint::setStrokeWidth", "SkPathUtils::FillPathWithPaint"], "notes": "Bug regression test (b/41322892) covering edge cases in rectangle stroking.", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "strokerect_anisotropic.cpp", "name": "Anisotropic Rectangle Stroke", "description": "Tests stroking of heavily scaled (anisotropic) rectangles with different join styles at whole and half-pixel boundaries.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawRect", "SkCanvas::scale", "SkPaint::setStrokeJoin", "SkPaint::setAntiAlias"], "notes": "Bug regression test (crbug.com/935303) for anisotropic stroke rendering edge cases.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "tallstretchedbitmaps.cpp", "name": "Tall Stretched Bitmap Rendering", "description": "Tests rendering of very tall bitmaps with extreme aspect ratios and stretched/scaled display using tiled image utilities.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkBitmap", "SkImage", "SkCanvas::drawImage", "SkTiledImageUtils::DrawImageRect", "SkSamplingOptions"], "notes": "Stress test for bitmap handling with tall images and extreme scaling.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "trickycubicstrokes.cpp", "name": "Tricky Cubic Strokes", "description": "Stress-tests stroke rendering with 25 challenging cubic curves and conics including edge cases like cusps, flat lines, and near-cusps.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas", "SkPaint", "SkPath", "SkPathBuilder"], "notes": "Internal stress test for stroking algorithm edge cases on GPU backend.", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "verylargebitmap.cpp", "name": "Very Large Bitmap Tiling", "description": "Tests rendering of extremely large bitmaps (65K x 1024 pixels) and picture images, with manual tiling fallback for GPU texture size limits.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkImage", "SkSurface", "SkPaint", "SkPictureRecorder"], "notes": "Internal stress test for oversized image rendering and GPU tiling.", "sampleStatus": "similar", "matchedSample": "Text Lab"}, {"file": "attributes.cpp", "name": "Attributes", "description": "GPU-backend-specific test exercising explicit and implicit vertex attribute offsets and strides in GrGeometryProcessor.", "interesting": "low", "apis_available": false, "missing_apis": ["GrGeometryProcessor", "GrDrawOp", "GrRecordingContext", "GPU geometry processor APIs"], "key_apis": ["GrGeometryProcessor", "GrDrawOp", "GrRecordingContext", "GPU vertex attributes"], "notes": "Low-level GPU backend test. Not relevant to SkiaSharp - tests internal Ganesh rendering infrastructure.", "sampleStatus": "similar", "matchedSample": "Text Lab"}, {"file": "bc1_transparency.cpp", "name": "BC1 Texture Compression Transparency", "description": "Tests BC1 (DXT1) compressed texture format's per-block transparency handling comparing RGB8 vs RGBA8 formats.", "interesting": "low", "apis_available": false, "missing_apis": ["BC1 compressed texture support", "GrDirectContext", "GPU texture compression APIs"], "key_apis": ["SkImage"], "notes": "GPU backend-specific compressed texture test. Not applicable to SkiaSharp.", "sampleStatus": "similar", "matchedSample": "Text Lab"}, {"file": "bigrrectaaeffect.cpp", "name": "Big Rounded Rect AA Effect", "description": "GPU-specific test for anti-aliased rounded rectangle rendering with large dimensions, testing fill and inverse-fill edge types.", "interesting": "low", "apis_available": false, "missing_apis": ["GrRecordingContext", "GrRRectEffect", "GrFragmentProcessor", "GrPaint", "SurfaceDrawContext", "GrClipEdgeType"], "key_apis": ["SKCanvas.drawRect", "SKRRect", "SKMatrix"], "notes": "GPU-backend-specific test using internal Ganesh APIs; not portable to SkiaSharp.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "clockwise.cpp", "name": "Clockwise Winding", "description": "GPU-backend specific test for sk_Clockwise GLSL variable behavior in different render target origins and with various transformations.", "interesting": "low", "apis_available": false, "missing_apis": ["GrGeometryProcessor", "GrGLSLFragmentShaderBuilder", "GrDirectContext", "sk_Clockwise winding tests"], "key_apis": ["SKCanvas"], "notes": "Tests GPU tessellation and geometry processor behavior. Relies heavily on Ganesh GPU-specific APIs not in SkiaSharp.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "concat44.cpp", "name": "Concat 4x4 Matrix", "description": "File does not exist in current google/skia repository (likely removed or renamed).", "interesting": "low", "apis_available": false, "missing_apis": [], "key_apis": [], "notes": "File not found at gm/concat44.cpp in current Skia HEAD", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "crbug_1162942.cpp", "name": "Chromium Bug 1162942: Perspective Quad AA Degeneration", "description": "Tests perspective quad rendering with edge anti-aliasing flags when inset degeneration causes 2D points to fall outside projected edges.", "interesting": "low", "apis_available": false, "missing_apis": ["experimental_DrawEdgeAAQuad"], "key_apis": ["SkCanvas::experimental_DrawEdgeAAQuad", "SkMatrix", "SkRect", "SkPoint"], "notes": "Uses experimental_DrawEdgeAAQuad not exposed in SkiaSharp; regression test for chromium bug", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "crbug_1167277.cpp", "name": "Chromium Bug 1167277: Perspective Quad AA Extreme Degeneration", "description": "Regression test where perspective quad edge AA degeneration produces triangle points far outside the original quad bounds.", "interesting": "low", "apis_available": false, "missing_apis": ["experimental_DrawEdgeAAQuad"], "key_apis": ["SkCanvas::experimental_DrawEdgeAAQuad", "SkMatrix", "SkRect", "SkPoint"], "notes": "Uses experimental_DrawEdgeAAQuad not exposed in SkiaSharp; regression test for chromium bug", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "crbug_1174186.cpp", "name": "Chromium Bug 1174186: Thin Quad AA Outset Artifacts", "description": "Stress test for thin, nearly-line perspective quads with various edge AA flags where outsetting calculations produce extreme artifacts.", "interesting": "low", "apis_available": false, "missing_apis": ["experimental_DrawEdgeAAQuad"], "key_apis": ["SkCanvas::experimental_DrawEdgeAAQuad", "SkMatrix", "SkRect", "SkPoint"], "notes": "Uses experimental_DrawEdgeAAQuad not exposed in SkiaSharp; regression test for chromium bug", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "crbug_1174354.cpp", "name": "Chromium Bug 1174354: Backdrop Blur Border Transparency", "description": "Tests backdrop blur filter with saveLayer where border pixels on downsampled textures could incorrectly introduce transparency.", "interesting": "low", "apis_available": false, "missing_apis": ["SaveLayerRec with backdrop filter"], "key_apis": ["SkCanvas::saveLayer", "SkCanvas::SaveLayerRec", "SkImageFilters::Blur", "SkShaders::SweepGradient"], "notes": "Regression test for chromium bug; backdrop filter support may be limited in SkiaSharp", "sampleStatus": "similar", "matchedSample": "Blur Image Filter"}, {"file": "crbug_1177833.cpp", "name": "Crbug 1177833 - Thin Line Perspective Quads", "description": "Multiple regression tests for very thin perspective quads that collapse during inset, with coverage outside projected quad.", "interesting": "low", "apis_available": false, "missing_apis": ["experimental_DrawEdgeAAQuad"], "key_apis": ["SkCanvas", "experimental_DrawEdgeAAQuad", "SkMatrix"], "notes": "Bug regression test; complex GPU geometry edge cases.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "crbug_478659067.cpp", "name": "Crbug 478659067 - Graphite Font Rendering", "description": "Tests device-independent font rendering with Graphite backend, using large glyph sizes and skewed fonts to stress the glyph cache.", "interesting": "low", "apis_available": false, "missing_apis": ["Graphite", "Recorder", "Device-independent fonts"], "key_apis": ["SkCanvas", "SkFont", "SkTextBlob", "SkSurface"], "notes": "GPU-only, Graphite backend specific. Requires internal GPU recorder API.", "sampleStatus": "similar", "matchedSample": "Text Lab"}, {"file": "dash.cpp", "name": "Dash Path Effect", "description": "File does not exist in current google/skia repository (likely renamed to dashing.cpp).", "interesting": "low", "apis_available": false, "missing_apis": [], "key_apis": [], "notes": "File not found at gm/dash.cpp; the repository has gm/dashing.cpp instead", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "deviceclip.cpp", "name": "Device Clip", "description": "Tests device-space clipping operations on canvas with GPU context management.", "interesting": "low", "apis_available": false, "missing_apis": ["GrDirectContext", "GrRecordingContext"], "key_apis": ["SkCanvas", "SkSurface", "GrDirectContext", "SkImageInfo"], "notes": "GPU-backend-specific test with GrDirectContext operations not available in SkiaSharp", "sampleStatus": "similar", "matchedSample": "Text Lab"}, {"file": "drawimageset.cpp", "name": "Draw Image Set", "description": "Tests experimental edge-antialiased image set drawing with transformations, blend modes, filtering, alpha, subsets, and color filters on tiled images.", "interesting": "low", "apis_available": false, "missing_apis": ["DrawImageSet", "experimental_DrawEdgeAAImageSet"], "key_apis": ["SkCanvas::experimental_DrawEdgeAAImageSet", "SkImage", "SkPaint", "SkBlendMode", "SkSamplingOptions"], "notes": "Uses experimental_DrawEdgeAAImageSet not exposed in SkiaSharp; GPU-backend-specific", "sampleStatus": "similar", "matchedSample": "Blend Modes"}, {"file": "drawquadset.cpp", "name": "Draw Quad Set", "description": "Tests tile-based quad drawing with various transformations using experimental edge-AA quad API and internal GPU APIs.", "interesting": "low", "apis_available": false, "missing_apis": ["experimental_DrawEdgeAAQuad", "SurfaceDrawContext", "GrPaint", "GrRecordingContext"], "key_apis": ["SkCanvas::experimental_DrawEdgeAAQuad", "SkMatrix", "SkShader"], "notes": "Uses internal GPU APIs not exposed in SkiaSharp", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "ducky_yuv_blend.cpp", "name": "Ducky YUV Blend", "description": "Tests blending of YUV-encoded images with different blend modes, reproducing CSS blend mode layout test with both JPEG and YUV plane sources.", "interesting": "low", "apis_available": false, "missing_apis": ["YUV planes", "LazyYUVImage", "SkYUVAPixmaps"], "key_apis": ["SkCanvas", "SkImage", "SkPaint", "SkBlendMode"], "notes": "Requires YUV image support and GrContext not available in SkiaSharp; GPU-backend-specific", "sampleStatus": "similar", "matchedSample": "Blend Modes"}, {"file": "exoticformats.cpp", "name": "Exotic Texture Formats", "description": "Exercises GPU handling of exotic compressed texture formats (ETC1/ETC2 and BC1) by loading and rendering pre-compressed KTX and DDS files.", "interesting": "low", "apis_available": false, "missing_apis": ["GrDirectContext", "GrBackendTexture", "TextureFromCompressedTextureData"], "key_apis": ["SkCanvas::drawImage", "SkImage", "SkPaint"], "notes": "GPU-backend-specific; requires compressed texture APIs not available in SkiaSharp", "sampleStatus": "similar", "matchedSample": "Text Lab"}, {"file": "fontations.cpp", "name": "Fontations Typeface", "description": "Tests Fontations (Rust font library) backend for variable fonts with glyph counting, localized family names, and PostScript name retrieval.", "interesting": "low", "apis_available": false, "missing_apis": ["SkTypeface_Make_Fontations", "Fontations backend"], "key_apis": ["SkTypeface", "SkFont", "SkFontArguments", "SkCanvas::drawSimpleText"], "notes": "Requires Fontations Rust backend not selectable in SkiaSharp", "sampleStatus": "similar", "matchedSample": "Text Lab"}, {"file": "fontations_ft_compare.cpp", "name": "Fontations FreeType Comparison", "description": "Compares font rendering between Skia's Fontations backend and FreeType, focusing on glyph metrics and feature support.", "interesting": "low", "apis_available": false, "missing_apis": ["Fontations backend selection", "GrDirectContext"], "key_apis": ["SkCanvas", "SkFont", "SkTypeface", "SkFontMetrics", "GrDirectContext"], "notes": "Fontations is an internal Skia font backend not exposed in SkiaSharp", "sampleStatus": "similar", "matchedSample": "Text Lab"}, {"file": "fontcache.cpp", "name": "Font Cache Stress", "description": "Stress tests the GPU font glyph cache with multiple typefaces, sizes, and subpixel offsets; tests single vs. multi-texture atlas.", "interesting": "low", "apis_available": false, "missing_apis": ["GrDirectContext", "GPU glyph cache internals", "GrContextOptions"], "key_apis": ["SkFont", "SkTypeface", "SkCanvas::drawString", "SkPaint"], "notes": "GPU glyph cache internal stress test; requires GrDirectContext not available in SkiaSharp", "sampleStatus": "similar", "matchedSample": "Text Lab"}, {"file": "fontregen.cpp", "name": "TextBlob Regeneration Stress", "description": "Tests TextBlob caching and regeneration with GPU font atlas overflow scenarios.", "interesting": "low", "apis_available": false, "missing_apis": ["GrDirectContext", "font atlas internals", "GrContextOptions"], "key_apis": ["SkCanvas", "SkFont", "SkTextBlob", "SkPaint", "GrDirectContext"], "notes": "GPU font atlas stress test; requires GrContext manipulation not available in SkiaSharp", "sampleStatus": "similar", "matchedSample": "Text Lab"}, {"file": "fp_sample_chaining.cpp", "name": "Fragment Processor Sample Chaining", "description": "Tests complex fragment processor chaining with uniform matrix transforms, explicit coordinates, and device space composition.", "interesting": "low", "apis_available": false, "missing_apis": ["GrFragmentProcessor", "GrTextureEffect", "GrMatrixEffect", "GrPaint"], "key_apis": ["GrFragmentProcessor", "GrTextureEffect", "GrMatrixEffect", "GrPaint", "GrDirectContext"], "notes": "GPU-backend-specific internal shader composition test; not accessible via SkiaSharp", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "fpcoordinateoverride.cpp", "name": "Fragment Processor Coordinate Override", "description": "Tests fragment processor coordinate override behavior by sampling a texture at mirrored coordinates.", "interesting": "low", "apis_available": false, "missing_apis": ["GrFragmentProcessor", "GrTextureEffect"], "key_apis": ["GrFragmentProcessor", "GrTextureEffect", "GrDirectContext", "SurfaceFillContext"], "notes": "GPU fragment shader test requiring internal Ganesh APIs not exposed in SkiaSharp", "sampleStatus": "similar", "matchedSample": "Text Lab"}, {"file": "fwidth_squircle.cpp", "name": "GPU Derivative Function Squircle", "description": "Tests GPU-only fwidth() fragment derivative function to render an anti-aliased squircle using SDF-like derivative-based coverage.", "interesting": "low", "apis_available": false, "missing_apis": ["GrGeometryProcessor", "GPU shader derivatives (fwidth)", "GrProgramInfo", "GrDrawOp"], "key_apis": ["GrGeometryProcessor", "GrDrawOp", "GrProgramInfo", "GrDirectContext"], "notes": "GPU-only shader derivative test; fwidth() not available in CPU rendering; requires Ganesh internals", "sampleStatus": "similar", "matchedSample": "Text Lab"}, {"file": "graphitestart.cpp", "name": "Graphite Start", "description": "Tests core Graphite GPU backend functionality with shaders, gradients, color filters, and blend modes to bootstrap Graphite rendering.", "interesting": "low", "apis_available": false, "missing_apis": ["Graphite backend", "GPU-specific rendering"], "key_apis": ["SkCanvas", "SkShaders::Blend", "SkColorFilter", "SkBlendMode", "SkImage"], "notes": "GPU backend-specific test for Graphite. Uses SkShaders::Blend and GPU-specific features.", "sampleStatus": "similar", "matchedSample": "Blend Modes"}, {"file": "mac_aa_explorer.cpp", "name": "Mac Anti-Aliasing Explorer", "description": "Platform-specific test for macOS font antialiasing with various color combinations, font sizes, LCD rendering options using CoreGraphics.", "interesting": "low", "apis_available": false, "missing_apis": ["CoreGraphics integration", "CTFont"], "key_apis": ["SkFont", "SkFont::setEdging", "SkSurface::MakeRaster", "SkFontHinting"], "notes": "Platform-specific test for macOS. Uses CoreGraphics/Core Text directly.", "sampleStatus": "similar", "matchedSample": "Text Lab"}, {"file": "polygonoffset.cpp", "name": "Polygon Offset and Inset", "description": "Tests convex polygon insets and simple polygon offsets using SkPolyUtils functions for various polygon shapes.", "interesting": "low", "apis_available": false, "missing_apis": ["SkInsetConvexPolygon", "SkOffsetSimplePolygon"], "key_apis": ["SkPolyUtils::SkInsetConvexPolygon", "SkPolyUtils::SkOffsetSimplePolygon", "SkPath::Polygon"], "notes": "GPU stress test for polygon offsetting; SkiaSharp lacks SkPolyUtils polygon utilities.", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "rendertomipmappedyuvimageplanes.cpp", "name": "Render to Mipmapped YUV Image Planes", "description": "Tests rendering to YUV image planes with mipmapping using Graphite backend with color space conversion.", "interesting": "low", "apis_available": false, "missing_apis": ["SkYUVAInfo", "SkImages::TextureFromYUVAImages", "Graphite renderer", "skgpu::Mipmapped"], "key_apis": ["SkSurfaces::RenderTarget", "SkImages::TextureFromYUVAImages", "SkColorMatrix::RGBtoYUV", "SkYUVAInfo"], "notes": "Graphite-only test (not Ganesh/GPU). Requires advanced YUV color plane support.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "shadowutils.cpp", "name": "Shadow Utils", "description": "Comprehensive test of Skia's shadow rendering with 3D lighting, demonstrating ambient and spot shadows on various paths and shapes.", "interesting": "low", "apis_available": false, "missing_apis": ["SkShadowUtils::DrawShadow", "SkPoint3"], "key_apis": ["SkShadowUtils::DrawShadow", "SkPoint3", "SkPath", "SkRRect"], "notes": "GPU/backend-specific shadow rendering. SkiaSharp does not expose SkShadowUtils.", "sampleStatus": "similar", "matchedSample": "Path Builder"}, {"file": "skbug_12212.cpp", "name": "Skbug 12212 - Alpha_8 LCD Text", "description": "Tests rendering text with LCD subpixel antialiasing into an Alpha_8 color surface, checking text rendering correctness.", "interesting": "low", "apis_available": false, "missing_apis": ["GPU RenderTarget surface creation", "GPU recordingContext"], "key_apis": ["SkSurface", "SkCanvas", "SkFont", "SkTextBlob", "SkPaint"], "notes": "Bug regression test; GPU-specific, requires GPU RenderTarget surface.", "sampleStatus": "similar", "matchedSample": "Text Lab"}, {"file": "slug.cpp", "name": "Slug - GPU Text Optimization", "description": "Demonstrates GPU-accelerated text rendering using SkSlug for pre-compiled, reusable text rendering at various scales.", "interesting": "low", "apis_available": false, "missing_apis": ["sktext::gpu::Slug", "Slug::ConvertBlob", "Slug::draw"], "key_apis": ["sktext::gpu::Slug", "SkTextBlob", "SkCanvas"], "notes": "GPU-specific API for pre-compiled text; SkiaSharp does not expose Slug functionality.", "sampleStatus": "similar", "matchedSample": "2D Transforms"}, {"file": "swizzle.cpp", "name": "GPU Fragment Processor Swizzling", "description": "Demonstrates GPU-level color swizzling using GrFragmentProcessor and GrTextureEffect to rearrange color channels.", "interesting": "low", "apis_available": false, "missing_apis": ["GrFragmentProcessor", "GrTextureEffect", "SwizzleOutput", "SurfaceFillContext"], "key_apis": ["GrFragmentProcessor::SwizzleOutput", "GrTextureEffect", "GrMippedBitmap"], "notes": "Pure GPU Ganesh backend test. Requires low-level GPU APIs not available in SkiaSharp.", "sampleStatus": "similar", "matchedSample": "Text Lab"}, {"file": "texelsubset.cpp", "name": "Texel Subset Sampling (GPU)", "description": "GPU-specific test for GrTextureEffect::MakeSubset, testing how texel subsets are sampled under different filtering and wrap modes.", "interesting": "low", "apis_available": false, "missing_apis": ["GrTextureEffect::MakeSubset", "GrSamplerState"], "key_apis": ["GrTextureEffect::MakeSubset", "GrSamplerState", "GpuGM"], "notes": "GPU-only test using internal Ganesh APIs; not reproducible in SkiaSharp.", "sampleStatus": "similar", "matchedSample": "Text Lab"}, {"file": "wacky_yuv_formats.cpp", "name": "Wacky YUV Formats", "description": "Tests various YUV/YCbCr color formats (P016, P010, Y416, AYUV, Y410, etc.) for GPU texture conversion and advanced YUV image handling.", "interesting": "low", "apis_available": false, "missing_apis": ["YUV format support", "GPU texture APIs", "GrDirectContext YUV"], "key_apis": ["SkImage", "SkCanvas", "SkColorSpace", "GrDirectContext"], "notes": "GPU-backend-specific test for YUV texture handling. YUV texture support not available in SkiaSharp.", "sampleStatus": "similar", "matchedSample": "Text Lab"}, {"file": "ycbcrimage.cpp", "name": "YCbCr Image (Vulkan)", "description": "GPU-only test that exercises native YCbCr/I420 image format on Vulkan backend with YCbCr sampler helpers.", "interesting": "low", "apis_available": false, "missing_apis": ["VkYcbcrSamplerHelper", "GrDirectContext YUV texture APIs", "Vulkan YCbCr sampling"], "key_apis": ["SkImage", "GrDirectContext", "VkYcbcrSamplerHelper"], "notes": "Vulkan-only; uses internal VkYcbcrSamplerHelper. Not portable to CPU rendering.", "sampleStatus": "similar", "matchedSample": "Image Decoder"}, {"file": "yuv420_odd_dim.cpp", "name": "YUV420 Odd Dimensions", "description": "GPU test for handling YUV planar images with odd dimensions and 420 chroma subsampling correctly.", "interesting": "low", "apis_available": false, "missing_apis": ["GPU YUV image creation", "LazyYUVImage", "YUVUtils"], "key_apis": ["SkImage", "GrRecordingContext", "SkSurface"], "notes": "GPU-only test; uses internal YUVUtils and LazyYUVImage.", "sampleStatus": "similar", "matchedSample": "Text Lab"}, {"file": "yuvtorgbsubset.cpp", "name": "YUV to RGB Subset", "description": "GPU test for subsetting YUV multiplanar images where U and V planes have different resolution from Y (420 chroma subsampling).", "interesting": "low", "apis_available": false, "missing_apis": ["YUV plane subsetting", "GPU planar image operations", "YUVAPixmaps"], "key_apis": ["SkImage", "SkShader", "SkCanvas", "YUVAPixmaps"], "notes": "GPU-only; tests Y_U_V plane configuration with subset operations.", "sampleStatus": "similar", "matchedSample": "Shader Playground"}, {"file": "3d.cpp", "name": "3D Perspective Transforms", "description": "Tests 3D perspective transformations using SkM44 matrices for camera positioning and viewport transforms, demonstrating LookAt and Perspective matrix operations.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::concat", "SkCanvas::translate", "SkCanvas::drawRect", "SkM44::Perspective", "SkM44::LookAt", "SkPictureRecorder", "SkPicture"], "notes": "Uses 4x4 matrix transforms (SkM44) and picture recording to demonstrate composition of 3D transforms", "sampleStatus": "existing", "matchedSample": "3D Transforms"}, {"file": "androidblendmodes.cpp", "name": "Android Blend Modes", "description": "Demonstrates all Android-supported blend modes by compositing two shapes (rectangle and circle) with different SkBlendMode settings to show visual effects.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SKCanvas.saveLayer", "SKCanvas.drawImage", "SKCanvas.save/restore", "SKPaint.setBlendMode", "SKBlendMode (all modes)", "SKBitmap"], "notes": "Educational demonstration of blend mode API. All blend modes used are available in SkiaSharp.", "sampleStatus": "existing", "matchedSample": "Blend Modes"}, {"file": "animatedimageblurs.cpp", "name": "Animated Image Blurs", "description": "Demonstrates animating blur effects on image layers and demonstrates backdrop blur with text and image. Shows tiled blur with different tile modes.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SKImageFilter.Blur", "SKCanvas.saveLayer", "SKCanvas.drawRRect", "SKImageFilters.Arithmetic", "SKFont", "SKImage"], "notes": "Impressive visual demonstration of blur filters with animation. All APIs are available in SkiaSharp.", "sampleStatus": "existing", "matchedSample": "Blur Image Filter"}, {"file": "bicubic.cpp", "name": "Bicubic Image Sampling", "description": "Demonstrates bicubic (cubic) image resampling filters (Mitchell and Catmull-Rom) compared to nearest-neighbor and linear filtering.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkSamplingOptions", "SkCubicResampler", "SkCanvas::drawImage", "SkShader", "SkSurface"], "notes": "Excellent example of advanced image sampling techniques showing visual quality differences", "sampleStatus": "existing", "matchedSample": "Path Builder"}, {"file": "bitmapshader.cpp", "name": "Bitmap Shader", "description": "Tests bitmap shaders with matrix transformations, tiling modes, and mask-based rendering; includes huge texture edge case.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SKImage.makeShader", "SKShader", "SKTileMode", "SKCanvas.drawImage", "SKCanvas.drawRect", "SKMatrix", "SKSamplingOptions"], "notes": "Demonstrates powerful shader composition and tiling capabilities; includes stress test for oversized textures.", "sampleStatus": "existing", "matchedSample": "Shader Playground"}, {"file": "blurimagevmask.cpp", "name": "Blur: Image Filter vs Mask Filter", "description": "Compares mask filter blur with image filter blur on rectangles, showing the difference between the two blur approaches with multiple sigma values.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkMaskFilter::MakeBlur", "SkImageFilters::Blur", "SkPaint", "SkCanvas"], "notes": "Side-by-side comparison of two blur techniques. Useful for understanding when to use each method.", "sampleStatus": "existing", "matchedSample": "Blur Image Filter"}, {"file": "blurrect.cpp", "name": "Blur Rectangle", "description": "Comprehensive test of blur effects on rectangles, donuts, and skewed shapes with different blur styles and gradient shaders.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkMaskFilter::MakeBlur", "SkPath", "SkShader", "SkPaint", "SkCanvas", "SkBlurStyle"], "notes": "Tests all blur styles (normal, inner, outer). Demonstrates blur with gradients and various shape geometries.", "sampleStatus": "existing", "matchedSample": "Blur Image Filter"}, {"file": "blurroundrect.cpp", "name": "Blur Round Rectangle", "description": "Tests blur effects on rounded rectangles with varying corner and blur radii, including gradient shaders and extreme geometry cases.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkMaskFilter::MakeBlur", "SkRRect", "SkShader", "SkPaint", "SkCanvas", "SkBlurStyle"], "notes": "Tests systematic combinations of blur and corner radii. Runnable as benchmark.", "sampleStatus": "existing", "matchedSample": "Blur Image Filter"}, {"file": "blurs.cpp", "name": "Blur Effects", "description": "Comprehensive demonstration of various blur styles (inner, normal, solid, outer) applied to circles and text, plus large-sigma image blur filters with tiled rendering.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SKCanvas", "SKPaint", "SKMaskFilter", "SKImageFilter", "SKColorFilter", "SKBlendMode", "SKImage", "SKFont"], "notes": "Demonstrates practical blur usage across different blur styles and includes advanced filter composition with tiling", "sampleStatus": "existing", "matchedSample": "Blur Image Filter"}, {"file": "clippedbitmapshaders.cpp", "name": "Clipped Bitmap Shaders", "description": "Tests bitmap shader rendering with different tile modes (repeat, mirror, clamp) when the shader pattern cell is clipped and transformed.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SKShader", "SKBitmap.MakeShader", "SKCanvas.ClipRect", "SKTileMode", "SKSamplingOptions"], "notes": "Demonstrates advanced shader tiling behavior with clipping in multiple configurations.", "sampleStatus": "existing", "matchedSample": "Shader Playground"}, {"file": "clipshader.cpp", "name": "Clip Shader", "description": "Tests clipShader functionality with image shaders combined with canvas matrix transformations and gradient shaders.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SKCanvas.ClipShader", "SKShader", "SKRadialGradient", "SKSurface.MakeImageSnapshot"], "notes": "Advanced clip shader usage with transforms and verifies that linear filtering works correctly with clip images.", "sampleStatus": "existing", "matchedSample": "Shader Playground"}, {"file": "concavepaths.cpp", "name": "Concave Paths", "description": "Comprehensive test of concave path rendering including bowtie patterns, self-intersections, holes, monotone curves, and edge case handling.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawPath", "SkPaint", "SkPath", "SkPathBuilder", "SkPath::Polygon"], "notes": "Extensive path tessellation stress test; fully reproducible in SkiaSharp", "sampleStatus": "existing", "matchedSample": "Path Builder"}, {"file": "crop_imagefilter.cpp", "name": "Crop Image Filter with Tile Modes", "description": "Comprehensive test of SkImageFilters::Crop with Decal, Clamp, Repeat, Mirror tile modes and different relationships between crop rect, content bounds, and output bounds.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas", "SkImageFilter", "SkImageFilters::Crop", "SkImageFilters::Blur", "SkTileMode", "SkShader"], "notes": "Comprehensive image filter crop behavior test. High-value for understanding filter composition.", "sampleStatus": "existing", "matchedSample": "Photo Lab"}, {"file": "cubicpaths.cpp", "name": "Cubic Bezier Paths", "description": "Comprehensive demonstration of cubic path rendering with various fill types, stroke styles, line caps, joins, and transformations.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkPathBuilder::cubicTo", "SkPathBuilder::moveTo", "SkCanvas::drawPath", "SkPaint::setStrokeCap", "SkPaint::setStrokeJoin", "SkShaders::LinearGradient"], "notes": "Useful reference for cubic path rendering quality; fully reproducible in SkiaSharp", "sampleStatus": "existing", "matchedSample": "Path Builder"}, {"file": "drawlines_with_local_matrix.cpp", "name": "Draw Lines with Local Matrix", "description": "Demonstrates drawing lines with gradient shaders that use local matrix transformations.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkShaders::RadialGradient", "SkCanvas::drawPoints", "SkPaint::setShader", "SkMatrix"], "notes": "Shows shader local transformation technique; fully reproducible in SkiaSharp", "sampleStatus": "existing", "matchedSample": "2D Transforms"}, {"file": "emptypath.cpp", "name": "Empty Path", "description": "Tests drawing of empty paths with different fill types and paint styles, as well as empty stroke paths with various move/line/close commands.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawPath", "SkPath", "SkPaint", "SkPathFillType"], "notes": "Edge case regression tests for path rasterization; fully reproducible in SkiaSharp", "sampleStatus": "existing", "matchedSample": "Path Builder"}, {"file": "fontmgr.cpp", "name": "Font Manager Iteration and Matching", "description": "Demonstrates font manager APIs for enumerating families, styles, and matching typefaces by name and style; tests character fallback for CJK and emoji.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkFontMgr", "SkTypeface", "SkFontStyle", "SkFont", "SkFontStyleSet"], "notes": "Core font management APIs fully available in SkiaSharp; practical font selection patterns", "sampleStatus": "existing", "matchedSample": "Text Lab"}, {"file": "fontscaler.cpp", "name": "Font Scaler and Rasterization", "description": "Tests font rasterization quality at various sizes with different hinting modes, subpixel AA, rotations, and transformations.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkFont", "SkCanvas", "SkPaint", "SkMatrix"], "notes": "Core text rendering quality and hinting modes; fully reproducible in SkiaSharp", "sampleStatus": "existing", "matchedSample": "Text Lab"}, {"file": "gammatext.cpp", "name": "Gamma-Correct Text Rendering", "description": "Demonstrates gamma-correct text rendering with various color/shader combinations, testing text antialiasing quality.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkFont", "SkCanvas", "SkPaint", "SkShader", "SkColor4f"], "notes": "Core text rendering with color space and shader support; fully reproducible in SkiaSharp", "sampleStatus": "existing", "matchedSample": "Text Lab"}, {"file": "getpostextpath.cpp", "name": "Text Path Extraction and Positioning", "description": "Demonstrates extracting text paths from glyphs and using custom glyph positioning with SkTextBlob, including bounds measurement.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkFont", "SkPath", "SkTextBlob", "SkCanvas"], "notes": "Core text path and glyph positioning APIs available; useful for advanced text layout", "sampleStatus": "existing", "matchedSample": "Path Builder"}, {"file": "gradient_dirty_laundry.cpp", "name": "Gradient Dirty Laundry", "description": "Displays linear, radial, and sweep gradients with 40 color stops to test gradient rendering with many color transitions and edge cases.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkGradientShader::MakeLinear", "SkGradientShader::MakeRadial", "SkGradientShader::MakeSweep", "SkPaint::setShader"], "notes": "Core gradient feature. SkiaSharp can fully reproduce this.", "sampleStatus": "existing", "matchedSample": "Gradient"}, {"file": "gradient_matrix.cpp", "name": "Gradient with Local Matrix Transform", "description": "Tests gradient shaders with local matrix transformations applied, verifying correct order of operations when scaling and translating gradient coordinate spaces.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkGradientShader::MakeLinear", "SkGradientShader::MakeRadial", "SkMatrix", "SkPaint::setShader"], "notes": "Core gradient feature with matrix transforms. Fully available in SkiaSharp.", "sampleStatus": "existing", "matchedSample": "2D Transforms"}, {"file": "gradients.cpp", "name": "Comprehensive Gradient Test", "description": "Comprehensive test of all gradient types (linear, radial, sweep, two-point conical) with multiple color configurations, tile modes, and dithering.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkGradientShader::MakeLinear", "SkGradientShader::MakeRadial", "SkGradientShader::MakeSweep", "SkGradientShader::MakeTwoPointConical", "SkPaint::setDither"], "notes": "Foundational gradient test. SkiaSharp can fully reproduce all variants.", "sampleStatus": "existing", "matchedSample": "Gradient"}, {"file": "gradients_2pt_conical.cpp", "name": "Two-Point Conical Gradient Edge Cases", "description": "Extensive testing of two-point conical gradients with edge cases: inside/outside configurations, zero radii, touch points, and various tile modes.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkGradientShader::MakeTwoPointConical", "SkTileMode", "SkMatrix", "SkPaint::setDither"], "notes": "Advanced gradient feature. SkiaSharp has full support for two-point conical gradients.", "sampleStatus": "existing", "matchedSample": "Gradient"}, {"file": "gradients_degenerate.cpp", "name": "Degenerate Gradient Cases", "description": "Tests degenerate gradient configurations where start and end points coincide or have zero radius, verifying fallback behavior with all tile modes.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkGradientShader::MakeLinear", "SkGradientShader::MakeRadial", "SkGradientShader::MakeSweep", "SkGradientShader::MakeTwoPointConical", "SkTileMode"], "notes": "Important edge case handling. Fully supported in SkiaSharp.", "sampleStatus": "existing", "matchedSample": "Gradient"}, {"file": "gradients_no_texture.cpp", "name": "Gradients Without Texture Backing", "description": "Tests gradients with varying color counts (1-4 stops) and all gradient types with dithering enabled/disabled, including many-stop and alpha variants.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkGradientShader::MakeLinear", "SkGradientShader::MakeRadial", "SkGradientShader::MakeSweep", "SkGradientShader::MakeTwoPointConical", "SkPaint::setDither", "SkPaint::setAlpha"], "notes": "Tests software gradient rendering. SkiaSharp can reproduce all gradient types.", "sampleStatus": "existing", "matchedSample": "Gradient"}, {"file": "gradtext.cpp", "name": "Gradient Text Rendering", "description": "Demonstrates gradient shaders applied to text with different font edging modes (alias, anti-alias, subpixel). Tests both fill and stroke text styles with gradients.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkGradientShader::MakeLinear", "SkFont::setEdging", "SkPaint::setShader", "SkCanvas::drawString"], "notes": "Core feature combining gradients with text. Fully supported in SkiaSharp.", "sampleStatus": "existing", "matchedSample": "Text Lab"}, {"file": "image_shader.cpp", "name": "Image Shader Rendering", "description": "Tests drawing images as shaders with different creation methods (raster, GPU texture, deferred picture, encoded data) and shader tiling behavior.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkImage::makeShader", "SkSurface::MakeRaster", "SkPictureRecorder", "SkCanvas::drawImage", "SkTileMode"], "notes": "Core API for image shaders with tile modes. GPU path tested but gracefully falls back.", "sampleStatus": "existing", "matchedSample": "Shader Playground"}, {"file": "imageblur.cpp", "name": "Image Blur Filter", "description": "Tests blur image filter effects with varying sigma values applied to text rendered in save layers, demonstrating blur kernels in different directions.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkImageFilters::Blur", "SkCanvas::saveLayer", "SkCanvas::drawString"], "notes": "Basic blur filter with text. Demonstrates save layer technique for applying filters.", "sampleStatus": "existing", "matchedSample": "Blur Image Filter"}, {"file": "imageblurclampmode.cpp", "name": "Image Blur with Clamp Tiling", "description": "Tests blur filters with clamp tiling mode at various kernel sizes, applied to simple geometric shapes, showing edge behavior.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkImageFilters::Blur", "SkTileMode::kClamp", "SkCanvas::clipIRect"], "notes": "Tests blur tiling and boundary conditions with explicit crop rects.", "sampleStatus": "existing", "matchedSample": "Blur Image Filter"}, {"file": "imageblurrepeatmode.cpp", "name": "Image Blur with Repeat Tiling", "description": "Tests blur filters with repeat tiling mode applied to colored grid patterns, demonstrating tiling behavior when blur repeats across boundaries.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkImageFilters::Blur", "SkTileMode::kRepeat", "SkImageFilters::Crop"], "notes": "Tests repeat tile mode behavior with blurs. Includes regression test for skbug.com/40039025.", "sampleStatus": "existing", "matchedSample": "Blur Image Filter"}, {"file": "imagefiltersbase.cpp", "name": "Image Filters Base Test", "description": "Comprehensive test of basic image filter operations applied to different drawing primitives including paint, lines, rectangles, paths, text, bitmaps, patches, and atlases.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkImageFilter", "SkImageFilters::Blur", "SkImageFilters::DropShadow", "SkImageFilters::ColorFilter", "SkImageFilters::Offset", "SkImageFilters::Empty"], "notes": "Tests filters on multiple drawing types. High-value reference for image filter usage.", "sampleStatus": "existing", "matchedSample": "Photo Lab"}, {"file": "imagefiltersclipped.cpp", "name": "Image Filters Clipped", "description": "Tests image filtering with various clipping scenarios including clipped filter bounds, gradient circles, and complex filter graphs with resizing.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkImageFilters::Blur", "SkImageFilters::DropShadow", "SkImageFilters::DisplacementMap", "SkImageFilters::Dilate", "SkImageFilters::Erode", "SkImageFilters::Offset", "SkImageFilters::MatrixTransform"], "notes": "Tests filter behavior with clipping and crop rects.", "sampleStatus": "existing", "matchedSample": "Photo Lab"}, {"file": "imagefilterscropped.cpp", "name": "Cropped Primitive Rendering with Filters", "description": "Tests image filters with cropped output bounds applied to various primitive drawing operations (bitmap, path, paint, text).", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkImageFilters::ColorFilter", "SkImageFilters::Blur", "SkImageFilters::Erode", "SkImageFilters::Merge"], "notes": "Comprehensive test of crop rect behavior across multiple filter types and drawing primitives.", "sampleStatus": "existing", "matchedSample": "Photo Lab"}, {"file": "imagefiltersgraph.cpp", "name": "Complex Image Filter Composition", "description": "Tests complex filter graphs and compositions including blur+erode+color, dilate+matrix convolution, offset+arithmetic, and nested crop rects.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkImageFilters::Blend", "SkImageFilters::Compose", "SkImageFilters::Merge", "SkImageFilters::Arithmetic", "SkImageFilters::MatrixConvolution"], "notes": "Advanced filter composition and chaining. Tests absolute vs relative crop offsets.", "sampleStatus": "existing", "matchedSample": "Photo Lab"}, {"file": "imagefilterstransformed.cpp", "name": "Image Filters Transformed", "description": "Demonstrates image filters (blur, drop shadow, displacement, dilate, erode) applied with CTM transformations (rotation, skew, scaling).", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkImageFilters::Blur", "SkImageFilters::DropShadow", "SkImageFilters::DisplacementMap", "SkImageFilters::Dilate", "SkImageFilters::Erode", "SkImageFilters::MatrixTransform", "SkImageFilters::Compose"], "notes": "Tests CTM handling in image filters with transformations.", "sampleStatus": "existing", "matchedSample": "Photo Lab"}, {"file": "inversepaths.cpp", "name": "Inverse Paths", "description": "Comprehensive test of paths with inverse fill types (kInverseWinding, kInverseEvenOdd) combined with various path styles, dashes, and blur filters.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkPathFillType::kInverseWinding", "SkPathFillType::kInverseEvenOdd", "SkCanvas::drawPath", "SkDashPathEffect", "SkMaskFilter::MakeBlur"], "notes": "Comprehensive test of inverse path rendering. All APIs available in SkiaSharp.", "sampleStatus": "existing", "matchedSample": "Path Builder"}, {"file": "lcdblendmodes.cpp", "name": "LCD Text Blend Modes", "description": "Demonstrates LCD text rendering with subpixel antialiasing applied to all 29 blend modes on various background color combinations.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkFont::setSubpixel", "SkFont::setEdging", "SkPaint::setBlendMode", "SkSurface", "SkSurfaceProps"], "notes": "Core LCD text rendering with comprehensive blend mode coverage.", "sampleStatus": "existing", "matchedSample": "Blend Modes"}, {"file": "lcdtext.cpp", "name": "LCD Text Rendering", "description": "Core test for LCD text rendering with subpixel antialiasing in various configurations and text sizing limits.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkFont::setSubpixel", "SkFont::setEdging", "SkCanvas::drawString", "SkCanvas::saveLayer"], "notes": "Core LCD text rendering feature. Includes size limit tests and preserve-LCD-text save layer flag.", "sampleStatus": "existing", "matchedSample": "Text Lab"}, {"file": "mixedtextblobs.cpp", "name": "Mixed Text Blobs", "description": "Tests rendering of mixed text with different fonts, sizes, and styles (including emoji and color fonts) in a single text blob with clipping.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkTextBlob", "SkTextBlobBuilder", "SkFont", "SkTypeface", "SkCanvas::drawTextBlob", "SkCanvas::clipRect"], "notes": "Core text rendering. SkiaSharp has full support for text blobs and font management.", "sampleStatus": "existing", "matchedSample": "Text Lab"}, {"file": "offsetimagefilter.cpp", "name": "Offset Image Filter", "description": "Tests offset image filtering with crop rectangles and clipping behavior, demonstrating both simple and complex offset scenarios.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkImageFilters::Offset", "SkImageFilters::Image", "SkPaint"], "notes": "Tests offset filter with various crop rect and clip rect combinations.", "sampleStatus": "existing", "matchedSample": "Photo Lab"}, {"file": "patheffects.cpp", "name": "Path Effects Demonstration", "description": "Comprehensive test of path effects including dash, discrete, corner, 1D path, and 2D tile effects with composition.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkDashPathEffect::Make", "SkCornerPathEffect::Make", "SkDiscretePathEffect::Make", "SkPath1DPathEffect::Make", "SkPath2DPathEffect::Make", "SkPathEffect::MakeCompose"], "notes": "Tests all major path effect types and composition. All available in SkiaSharp.", "sampleStatus": "existing", "matchedSample": "Path Builder"}, {"file": "pathfill.cpp", "name": "Path Fill Types and Rendering", "description": "Demonstrates various path fill types and rendering with different fill rules, including stroked path conversion and complex shapes.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkPathFillType", "SkPath::setFillType", "skpathutils::FillPathWithPaint", "SkPaint::setStyle", "SkPathBuilder"], "notes": "Core path rendering. All fill types available in SkiaSharp.", "sampleStatus": "existing", "matchedSample": "Path Builder"}, {"file": "pathopsinverse.cpp", "name": "Path Operations with Inverse Fill Types", "description": "Tests Skia path operations (union, difference, intersection, XOR) with inverse fill types showing various blending effects.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkPathOp", "SkPath::Op", "SkOpBuilder", "SkPathFillType::kInverseEvenOdd"], "notes": "SkiaSharp supports all path operations including inverse fill types.", "sampleStatus": "existing", "matchedSample": "Path Builder"}, {"file": "perlinnoise.cpp", "name": "Perlin Noise Shader Variations", "description": "Comprehensive test of Perlin noise shaders with fractal noise and turbulence types, various octave counts, seed values, and tile stitching.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkShaders::MakeFractalNoise", "SkShaders::MakeTurbulence", "SkPaint::setShader", "SkImageFilter", "SkColorFilter::Matrix"], "notes": "SkiaSharp fully supports Perlin noise with both fractal and turbulence modes.", "sampleStatus": "existing", "matchedSample": "Noise Generator"}, {"file": "perspshaders.cpp", "name": "Perspective Shaders and Transforms", "description": "Tests shader rendering under perspective transforms including image, gradient, and pattern shaders with perspective clipping edge cases.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkGradientShader::MakeLinear", "SkImage::makeShader", "SkMatrix::setPerspY", "SkCanvas::concat", "SkCanvas::drawRect"], "notes": "Advanced perspective transform handling. Includes half-plane clipping test for extreme perspective.", "sampleStatus": "existing", "matchedSample": "Shader Playground"}, {"file": "pictureshader.cpp", "name": "Picture Shader Rendering", "description": "Comprehensive test of picture shaders with various tile modes, transforms, scale factors, and local matrix wrappers including perspective transforms.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas", "SkPicture", "SkPictureRecorder", "SkShader", "SkTileMode", "SkMatrix"], "notes": "Extensive picture shader API test with complex transforms and tiling. High-value pattern.", "sampleStatus": "existing", "matchedSample": "Shader Playground"}, {"file": "resizeimagefilter.cpp", "name": "Resize Image Filter", "description": "Demonstrates matrix transform image filtering with various sampling modes including linear, mipmapping, cubic, and anisotropic filtering.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkImageFilters::MatrixTransform", "SkSamplingOptions", "SkImageFilters::Image", "SkSurface"], "notes": "Shows advanced sampling options for image filtering.", "sampleStatus": "existing", "matchedSample": "Photo Lab"}, {"file": "rsxtext.cpp", "name": "RSXform Text with Shader", "description": "Tests RSXform-positioned text blobs rendered with different shader local matrix combinations demonstrating grid pattern alignment.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkTextBlob", "SkTextBlobBuilder::allocRunRSXform", "SkRSXform", "SkShader", "SkSamplingOptions"], "notes": "Visually interesting demo of RSX text positioning with shader local matrices.", "sampleStatus": "existing", "matchedSample": "Text Lab"}, {"file": "runtimecolorfilter.cpp", "name": "Runtime Color Filter", "description": "Demonstrates SkSL runtime color filters with different control flow patterns including luminance-based tone mapping and color manipulation.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkRuntimeEffect", "SkRuntimeEffect::MakeForColorFilter", "SkColorFilter", "SkVertices", "SkRSXform"], "notes": "Shows practical SkSL usage for color effects; tests runtime color filters with vertices, atlas, and patches.", "sampleStatus": "existing", "matchedSample": "Photo Lab"}, {"file": "runtimeimagefilter.cpp", "name": "Runtime Image Filter", "description": "Demonstrates SkSL runtime image filters with distortion effects and unsharp masking using dynamic shader composition.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkRuntimeEffect", "SkRuntimeEffect::MakeForShader", "SkImageFilter", "SkImageFilters::RuntimeShader", "SkRuntimeShaderBuilder"], "notes": "Shows practical image processing using runtime shaders as filters; includes distortion and unsharp techniques.", "sampleStatus": "existing", "matchedSample": "Photo Lab"}, {"file": "runtimeshader.cpp", "name": "Runtime Shader", "description": "Comprehensive showcase of SkSL runtime shaders including simple gradients, threshold effects, spirals, and complex animations.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkRuntimeEffect", "SkRuntimeEffect::MakeForShader", "SkRuntimeShaderBuilder", "SkShader", "SkMatrix"], "notes": "Rich set of visually interesting shader demos with animation and benchmarking capabilities.", "sampleStatus": "existing", "matchedSample": "Vertex Mesh"}, {"file": "scaledemoji.cpp", "name": "Scaled Emoji", "description": "Tests emoji rendering at various scales and font formats (CBDT, SBIX, COLR-V0, SVG) with positioned text blobs and perspective.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkFont", "SkTextBlob", "SkTextBlobBuilder::allocRunPosH", "SkTypeface", "SkMatrix"], "notes": "Platform-dependent emoji rendering; demonstrates multiple emoji font format support.", "sampleStatus": "existing", "matchedSample": "Color Fonts"}, {"file": "stroketext.cpp", "name": "Stroked Text Rendering", "description": "Tests text stroking with various stroke widths and styles, including variable fonts and dash patterns on text glyphs.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawString", "SkCanvas::drawTextBlob", "SkFont", "SkTypeface", "SkPaint::setStroke", "SkDashPathEffect"], "notes": "Comprehensive text stroking test including special font features and edge cases.", "sampleStatus": "existing", "matchedSample": "Text Lab"}, {"file": "text_scale_skew.cpp", "name": "Text Scale and Skew", "description": "Demonstrates text rendering with various scale and skew transformations applied to the font, testing matrix application order.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkFont", "SkFont::setScaleX", "SkFont::setSkewX", "SkTextUtils::DrawString", "SkCanvas::rotate"], "notes": "Visually interesting demonstration of text transformations.", "sampleStatus": "existing", "matchedSample": "Text Lab"}, {"file": "textblobtransforms.cpp", "name": "TextBlob with Transforms", "description": "Tests text blob rendering under various canvas transformations including translations, rotations, and scales.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkTextBlob", "SkTextBlobBuilder", "SkCanvas::translate", "SkCanvas::rotate", "SkCanvas::scale", "SkCanvas::drawTextBlob"], "notes": "Comprehensive visual demo of text blob transformation support.", "sampleStatus": "existing", "matchedSample": "2D Transforms"}, {"file": "texteffects.cpp", "name": "Text Effects", "description": "Demonstrates various text rendering effects including multiple font sizes, styles, gradients, and visual treatments on text.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkTextBlob", "SkPaint", "SkFont", "SkShader", "SkShaders::LinearGradient"], "notes": "Comprehensive text styling demo with multiple font sizes and gradient effects.", "sampleStatus": "existing", "matchedSample": "Text Lab"}, {"file": "vertices.cpp", "name": "Mesh & Vertices Rendering", "description": "Comprehensive test of drawVertices with all blend modes, color filters, shaders, texture coordinates, and vertex attributes including perspective projection.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkVertices", "SkCanvas", "SkPaint", "SkShader", "SkColorFilter", "SkBlendMode"], "notes": "Tests all 29 blend modes with vertices. High-value for custom rendering patterns.", "sampleStatus": "existing", "matchedSample": "Vertex Mesh"}, {"file": "xfermodeimagefilter.cpp", "name": "Xfermode Image Filter", "description": "Demonstrates blend mode operations applied as image filters using various SkBlendMode values with background and foreground image inputs.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas", "SkPaint", "SkImage", "SkImageFilter", "SkBlendMode"], "notes": "Comprehensive image filter and blend mode demonstration. All APIs available in SkiaSharp.", "sampleStatus": "existing", "matchedSample": "Blend Modes"}, {"file": "xfermodes2.cpp", "name": "Xfermodes2 (Shader Variant)", "description": "Alternative blend mode test displaying all modes using custom shader-based source and destination patterns with grayscale and color variants.", "interesting": "high", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas", "SkPaint", "SkBitmap", "SkShader", "SkBlendMode"], "notes": "Blend mode validation with shader-based rendering. All APIs available in SkiaSharp.", "sampleStatus": "existing", "matchedSample": "Blend Modes"}, {"file": "coloremoji.cpp", "name": "Color Emoji", "description": "Renders color emoji fonts (COLR v0, CBDT, SBIX, SVG, Test formats) at various sizes with shaders, image filters, and blend modes to test emoji rendering quality and effects.", "interesting": "high", "apis_available": false, "missing_apis": ["EmojiSample", "EmojiFontFormat enums", "ToolUtils emoji helpers"], "key_apis": ["SKFont", "SKCanvas.drawSimpleText", "SKShader (gradients)", "SKImageFilter (blur, grayscale)", "SKColorFilter (lighting)", "SKPaint", "SKRect", "SKClipRect"], "notes": "Uses Skia's emoji rendering system. The core rendering APIs (fonts, text, shaders, filters) are available, but SkiaSharp may lack the emoji font test infrastructure and format enums. COLR v0 support may be limited.", "sampleStatus": "existing", "matchedSample": "Color Fonts"}, {"file": "alphagradients.cpp", "name": "Alpha Gradients", "description": "Tests linear gradients with varying alpha values and premultiplication modes, comparing straight premul vs unpremul interpolation.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkGradientShader::MakeLinear", "SkGradient::Interpolation", "SkCanvas::drawRect", "SkColor4f"], "notes": "Tests gradient interpolation with different premultiplication settings", "sampleStatus": "existing", "matchedSample": "Gradient"}, {"file": "analytic_gradients.cpp", "name": "Analytic Gradient Colorizer", "description": "Tests the analytic unrolled binary gradient colorizer supporting 1-8 interpolation intervals with hardstops and smooth transitions.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkGradientShader::MakeLinear", "SkCanvas::drawRect", "SkTileMode", "SkColor4f"], "notes": "Tests gradient interpolation accuracy with various hardstop and smooth color transition configurations", "sampleStatus": "existing", "matchedSample": "Gradient"}, {"file": "annotated_text.cpp", "name": "Annotated Text", "description": "Demonstrates adding URL annotations to text and rectangles using SkAnnotateRectWithURL.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SKCanvas.drawAnnotation", "SkAnnotateRectWithURL", "SKFont", "SKCanvas.drawSimpleText"], "notes": "Shows annotation API for creating clickable regions. Available in SkiaSharp.", "sampleStatus": "existing", "matchedSample": "Text Lab"}, {"file": "backdrop_imagefilter_croprect.cpp", "name": "Backdrop Image Filter with Crop Rectangle", "description": "Tests backdrop filtering with explicit crop rectangles, including blur and color invert filters with rotation and perspective transforms.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::saveLayer", "SkImageFilters::ColorFilter", "SkImageFilters::Blur", "SkColorFilters::Matrix"], "notes": "Educational test of image filter crop rect behavior with various transformations", "sampleStatus": "existing", "matchedSample": "Photo Lab"}, {"file": "batchedconvexpaths.cpp", "name": "Batched Convex Paths", "description": "Draws 10 convex paths with cubic curves at various scales to test GPU batching of convex path rendering.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkPathBuilder", "SkPath", "SkCanvas::drawPath", "SkPaint"], "notes": "GPU batching test but demonstrates path rendering at various scales", "sampleStatus": "existing", "matchedSample": "Path Builder"}, {"file": "bigblurs.cpp", "name": "Large Blurred Shapes", "description": "Tests blur filter behavior on very large shapes (65k pixels) and shapes far from origin, validating nine-patch optimization.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkMaskFilter::MakeBlur", "SkBlurStyle", "SkPaint", "SkPath"], "notes": "Edge case testing of blur filters with extreme geometry", "sampleStatus": "existing", "matchedSample": "Blur Image Filter"}, {"file": "bigmatrix.cpp", "name": "Large Matrix Transformations", "description": "Tests rendering with extreme matrix transformations (3000x scale, large translation) to validate numerical precision.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkMatrix", "SkCanvas::concat", "SkShader", "SkPaint"], "notes": "Tests numerical stability of large transforms", "sampleStatus": "existing", "matchedSample": "2D Transforms"}, {"file": "bigtext.cpp", "name": "Big Text", "description": "Tests rendering of extremely large text glyphs (1500pt) to verify outline-based rendering for large font sizes and regression test for DirectWrite scaler bounds calculation.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SKCanvas.drawSimpleText", "SKCanvas.drawString", "SKFont", "SKTypeface", "SKPaint.setAntiAlias"], "notes": "Tests edge case where glyphs are so large they must be rendered via paths rather than cached glyphs.", "sampleStatus": "existing", "matchedSample": "Text Lab"}, {"file": "bigtileimagefilter.cpp", "name": "Big Tile Image Filter", "description": "Demonstrates the Tile image filter composing with image sources to create tiled textures at different scales.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SKImageFilter", "SKImageFilters.Tile", "SKImageFilters.Image", "SKCanvas.saveLayer", "SKImage", "SKSurface"], "notes": "Good example of image filter composition and layer-based rendering.", "sampleStatus": "existing", "matchedSample": "Photo Lab"}, {"file": "blurcircles.cpp", "name": "Blur Circles", "description": "Demonstrates blur mask filters applied to circles with varying radii, including rotation transforms to test GPU fast path handling.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawCircle", "SkMaskFilter::MakeBlur", "SkPaint", "SkBlurStyle"], "notes": "Tests kNormal_SkBlurStyle with multiple radius values and rotations", "sampleStatus": "existing", "matchedSample": "Blur Image Filter"}, {"file": "blurcircles2.cpp", "name": "Blur Circles 2 (Animated)", "description": "Animated test of blur effects on circles and near-circle paths with varying blur and circle radii, demonstrating GPU blur profile caching.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawCircle", "SkCanvas::drawPath", "SkMaskFilter::MakeBlur", "SkPathBuilder"], "notes": "Includes animation support and benchmarking mode", "sampleStatus": "existing", "matchedSample": "Blur Image Filter"}, {"file": "blurignorexform.cpp", "name": "Blur Ignore Transform", "description": "Tests the kIgnoreTransform flag of blur mask filters, demonstrating how CTM affects blur radius application across circles, rectangles, and rounded rectangles.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkMaskFilter::MakeBlur", "SkCanvas", "SkPaint", "SkRRect", "SkMatrix"], "notes": "Educational for understanding blur behavior under transforms", "sampleStatus": "existing", "matchedSample": "Blur Image Filter"}, {"file": "blurtextsmallradii.cpp", "name": "Small Radius Text Blur", "description": "Tests text rendering with very small blur radii (0.25 to 2.5 sigma) to ensure correct edge case handling of minimal blur effects.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SKCanvas", "SKPaint", "SKMaskFilter", "SKFont"], "notes": "Regression test for chrome bug 745290; validates small blur sigma handling", "sampleStatus": "existing", "matchedSample": "Blur Image Filter"}, {"file": "coloremoji_blendmodes.cpp", "name": "Color Emoji Blend Modes", "description": "Tests all 29 blend modes with color emoji glyphs to verify correct alpha blending and composition behavior for text rendering.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SKBlendMode (all 29 modes)", "SKFont", "SKCanvas.drawSimpleText", "SKPaint", "SKShader", "SKRect"], "notes": "All blend modes are available in SkiaSharp. The test uses emoji fonts which may have limited support, but the core blend mode and text APIs are fully available.", "sampleStatus": "existing", "matchedSample": "Blend Modes"}, {"file": "colorfilterimagefilter.cpp", "name": "Color Filter Image Filter", "description": "Demonstrates composition of color filters with image filters (blur, brightness, grayscale, blend modes) to test filter chaining and ordering effects.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SKImageFilter (blur, colorFilter, compose)", "SKColorFilter (matrix, brightness, grayscale, blend)", "SKShader (linear gradient, image)", "SKPaint", "SKCanvas"], "notes": "Tests filter composition and ordering. All APIs are available in SkiaSharp including color filters, image filters, blur, and blend filters.", "sampleStatus": "existing", "matchedSample": "Photo Lab"}, {"file": "colorfilters.cpp", "name": "Color Filters", "description": "Tests lighting color filter and HSL color filter with various hue, saturation, and lightness adjustments applied to images and gradients.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SKColorFilter.Lighting", "SKColorFilter.HSLAMatrix", "SKShader (linear gradient, sweep gradient, image)", "SKPaint", "SKCanvas"], "notes": "Uses lighting and HSL color filters which are both available in SkiaSharp. All APIs are well-supported.", "sampleStatus": "existing", "matchedSample": "Photo Lab"}, {"file": "colormatrix.cpp", "name": "Color Matrix", "description": "Tests color matrix filters with saturation adjustments, custom matrix operations, and channel manipulation on solid and transparent images.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SKColorMatrix", "SKColorFilter.Matrix", "SKShader (linear gradient)", "SKImage", "SKPaint", "SKCanvas"], "notes": "Comprehensive color matrix testing including saturation and custom channel transforms. All APIs are available in SkiaSharp.", "sampleStatus": "existing", "matchedSample": "2D Transforms"}, {"file": "complexclip_blur_tiled.cpp", "name": "Complex Clip with Blur (Tiled)", "description": "Tests tiled rendering with complex clipping and blur image filter, using saveLayer and tiled canvas surfaces.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas", "SkPaint", "SkImageFilter", "SkSurface", "SkImage"], "notes": "Demonstrates tiling pattern with saveLayer and blur filters.", "sampleStatus": "existing", "matchedSample": "Blur Image Filter"}, {"file": "convex_all_line_paths.cpp", "name": "Convex All Line Paths", "description": "Tests GPU tessellation of convex line-only paths with various scales, directions, and stroke-and-fill combinations.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawPath", "SkPaint", "SkPath", "SkPathBuilder", "SkPathDirection"], "notes": "Stress test for convex path rendering; core functionality available in SkiaSharp", "sampleStatus": "existing", "matchedSample": "Path Builder"}, {"file": "convexpaths.cpp", "name": "Convex Paths", "description": "Extensive test suite for convex path rendering with quadratic/cubic curves, various shapes (circles, ovals, rrects), and degenerate path edge cases.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawPath", "SkPaint", "SkPath", "SkPathBuilder", "SkRRect", "SkMatrix"], "notes": "Comprehensive convex path regression test suite; fully reproducible in SkiaSharp", "sampleStatus": "existing", "matchedSample": "Path Builder"}, {"file": "dropshadowimagefilter.cpp", "name": "Drop Shadow Image Filter", "description": "Demonstrates drop shadow effects applied to bitmaps, paths, text, and paint with various shadow parameters, crop rects, and combined filters.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkImageFilters::DropShadow", "SkImageFilters::DropShadowOnly", "SkColorFilter", "SkPaint"], "notes": "Drop shadow filters available as CreateDropShadow and CreateDropShadowOnly in SkiaSharp", "sampleStatus": "existing", "matchedSample": "Photo Lab"}, {"file": "encode_alpha_jpeg.cpp", "name": "Encode Alpha JPEG", "description": "Tests JPEG encoding with different alpha options (ignore vs. blend on black) across various color types and alpha states.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkJpegEncoder", "SkEncodedImageFormat", "SkImage", "SkPixmap", "SkColorSpace"], "notes": "JPEG encoding available in SkiaSharp; alpha handling options may vary", "sampleStatus": "existing", "matchedSample": "Image Decoder"}, {"file": "fatpathfill.cpp", "name": "Fat Path Fill", "description": "Demonstrates rendering of paths with stroke applied through FillPathWithPaint utility, showing per-pixel rasterization behavior at different scales.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawPath", "SkPath::Line", "SkPathBuilder", "SkSurface::Raster", "SkPaint::setStrokeWidth"], "notes": "Core path rasterization testing; uses internal utility but core drawing APIs available in SkiaSharp", "sampleStatus": "existing", "matchedSample": "Path Builder"}, {"file": "hittestpath.cpp", "name": "Hit Test Path", "description": "Tests path containment/hit-testing with SkPath::contains() by drawing point grids within even-odd and winding fill-type paths.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkPath::contains", "SkPathBuilder", "SkPathFillType", "SkCanvas::drawPath"], "notes": "Core path feature. SkPath.Contains available in SkiaSharp.", "sampleStatus": "existing", "matchedSample": "Path Builder"}, {"file": "hugepath.cpp", "name": "Huge Path", "description": "Tests rendering of paths with huge coordinate values (>64K dimensions) and very large radii rounded rectangles with and without anti-aliasing.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkPath", "SkRRect", "SkSurface", "SkCanvas"], "notes": "Edge case handling for path rendering. Core features available in SkiaSharp.", "sampleStatus": "existing", "matchedSample": "Path Builder"}, {"file": "imagefilterscropexpand.cpp", "name": "Crop Rect Expansion in Image Filters", "description": "Tests how image filter crop rectangles expand and contract, demonstrating filter behavior with various outset values on a checkerboard.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkImageFilters::Blur", "SkImageFilters::Dilate", "SkImageFilters::Erode", "SkImageFilters::DropShadow", "SkImageFilters::DisplacementMap"], "notes": "Tests crop rect semantics and boundary expansion behavior in filters.", "sampleStatus": "existing", "matchedSample": "Photo Lab"}, {"file": "imagefiltersunpremul.cpp", "name": "Image Filters Unpremultiplied Alpha", "description": "Tests that image filters correctly handle unpremultiplied alpha pixel data when using SkImageFilters::Image().", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkImageFilters::Image", "SkImages::RasterFromBitmap", "SkCubicResampler"], "notes": "Regression test for unpremul alpha handling in Image filter.", "sampleStatus": "existing", "matchedSample": "Photo Lab"}, {"file": "largeglyphblur.cpp", "name": "Large Glyph Blur", "description": "Tests rendering of text glyphs with large blur effects (40px radius), ensuring proper handling of glyphs exceeding standard strike maximums.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawTextBlob", "SkTextBlob::MakeFromText", "SkMaskFilter::MakeBlur", "SkFont"], "notes": "Core text rendering with blur filter.", "sampleStatus": "existing", "matchedSample": "Blur Image Filter"}, {"file": "localmatriximageshader.cpp", "name": "Local Matrix Image Shader", "description": "Tests composition of local matrix transformations with image shaders, including rotation and translation matrices via makeWithLocalMatrix.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkImage::makeShader", "SkShader::makeWithLocalMatrix", "SkMatrix"], "notes": "Core shader composition feature. Tests local matrix order.", "sampleStatus": "existing", "matchedSample": "2D Transforms"}, {"file": "localmatrixshader.cpp", "name": "Local Matrix Shader Nesting", "description": "Tests nested and composed local matrix shaders with various combinations (direct matrices, composed shaders, blended shaders) and transformation order.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkShader::makeWithLocalMatrix", "SkShaders::Blend", "SkGradientShader::MakeLinear", "SkGradientShader::MakeRadial", "SkImage::makeShader"], "notes": "Tests local matrix composition order in nested shader structures.", "sampleStatus": "existing", "matchedSample": "2D Transforms"}, {"file": "nonclosedpaths.cpp", "name": "Non-Closed Paths Rendering", "description": "Comprehensive test demonstrating how non-closed paths render differently based on stroke style, cap, and join settings.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkPath", "SkPathBuilder", "SkCanvas::drawPath", "SkPaint::setStyle", "SkPaint::setStrokeCap", "SkPaint::setStrokeJoin"], "notes": "Core stroke rendering feature fully supported in SkiaSharp.", "sampleStatus": "existing", "matchedSample": "Path Builder"}, {"file": "overdrawcolorfilter.cpp", "name": "Overdraw Color Filter", "description": "Tests SkOverdrawColorFilter which visualizes pixel overdraw counts by mapping them to distinct colors with varying alpha values.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkOverdrawColorFilter", "SkColorFilter", "SkBitmap", "SkCanvas::drawImage"], "notes": "Color filter used for visualization. Fully available in SkiaSharp.", "sampleStatus": "existing", "matchedSample": "Photo Lab"}, {"file": "pathcontourstart.cpp", "name": "Path Contour Start Point Variation", "description": "Tests drawing paths with different starting points for contours using Rect, Oval, RRect with direction and startIndex parameters.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkPath::Rect", "SkPath::Oval", "SkPath::RRect", "SkPathDirection", "SkDashPathEffect"], "notes": "Tests path creation with contour start index. All APIs available in SkiaSharp.", "sampleStatus": "existing", "matchedSample": "Path Builder"}, {"file": "pictureimagefilter.cpp", "name": "Picture Image Filter", "description": "Tests SkImageFilters::Picture which renders pictures as image filters, with source rect, resampling options, and LCD text rendering variants.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas", "SkPicture", "SkPictureRecorder", "SkImageFilter", "SkImageFilters::Picture", "SkFont"], "notes": "Tests picture as image filter with various rendering options.", "sampleStatus": "existing", "matchedSample": "Photo Lab"}, {"file": "pictureshadercache.cpp", "name": "Picture Shader Cache with Color Space", "description": "Tests picture shader caching behavior when rendering in different color spaces, verifying cached shaders are invalidated on color space change.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas", "SkPicture", "SkPictureRecorder", "SkShader", "SkColorSpace", "SkSurface"], "notes": "Tests picture shader caching with color space transformations.", "sampleStatus": "existing", "matchedSample": "Shader Playground"}, {"file": "radial_gradient_precision.cpp", "name": "Radial Gradient Precision", "description": "Tests rendering of a radial gradient with precise color interpolation, verifying smooth gradient transitions without banding or artifacts.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawPaint", "SkPaint::setShader", "SkShaders::RadialGradient", "SkTileMode::kRepeat"], "notes": "Simple gradient demonstration with large center point offset from canvas edge.", "sampleStatus": "existing", "matchedSample": "Gradient"}, {"file": "scaledemoji_rendering.cpp", "name": "Scaled Emoji Rendering", "description": "Demonstrates emoji rendering across different font formats at various scales with fake bold and subpixel positioning.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkFont", "SkFont::setSubpixel", "SkFont::setEmbolden", "SkTypeface", "SkFontMetrics"], "notes": "Platform-dependent emoji test; focuses on rendering quality and metrics across formats.", "sampleStatus": "existing", "matchedSample": "2D Transforms"}, {"file": "scaledstrokes.cpp", "name": "Scaled Strokes", "description": "Tests stroke rendering with various scaling factors, anti-aliasing modes, and shape types (paths, circles, rectangles, lines).", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkPaint::setStrokeWidth", "SkPaint::kStroke_Style", "SkPath", "SkPathBuilder", "SkCanvas::scale"], "notes": "Tests internal stroke rendering consistency under scale transforms.", "sampleStatus": "existing", "matchedSample": "2D Transforms"}, {"file": "shallowgradient.cpp", "name": "Shallow Gradient", "description": "Tests gradient shader rendering with minimal color variation in linear, radial, conical, and sweep types with and without dithering.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkShaders::LinearGradient", "SkShaders::RadialGradient", "SkShaders::TwoPointConicalGradient", "SkShaders::SweepGradient"], "notes": "All gradient types are available in SkiaSharp. Tests gradient quality with subtle color differences.", "sampleStatus": "existing", "matchedSample": "Gradient"}, {"file": "sharedcorners.cpp", "name": "Shared Corners", "description": "Tests anti-aliasing behavior when multiple triangles share corner points at various angles with different sampling offsets.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkPath", "SkPathBuilder", "SkCanvas::drawPath", "Anti-aliasing", "Matrix transforms"], "notes": "Focuses on edge case AA rendering with triangular geometry.", "sampleStatus": "existing", "matchedSample": "Path Effects Lab"}, {"file": "smallpaths.cpp", "name": "Small Paths Multiple Styles", "description": "Comprehensive test of small path rendering in fill, stroke, and stroke-and-fill styles with various widths and stroke parameters.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkPath", "SkPathBuilder", "SkPaint::kFill_Style", "SkPaint::kStroke_Style", "SkPaint::kStrokeAndFill_Style"], "notes": "Tests rendering of various path shapes and stroke styles; exercises path rendering quality.", "sampleStatus": "existing", "matchedSample": "Path Builder"}, {"file": "subsetshader.cpp", "name": "Bitmap Subset Shaders", "description": "Tests creating shaders from bitmap subsets with transformations, rotation, and tiling modes.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkBitmap::extractSubset", "SkBitmap::makeShader", "SkTileMode", "SkMatrix"], "notes": "Demonstrates subset shader creation and transformation behavior with tiling.", "sampleStatus": "existing", "matchedSample": "Shader Playground"}, {"file": "tablecolorfilter.cpp", "name": "Table Color Filter Effects", "description": "Demonstrates table-based color filters applying lookup table transformations on image colors and filter composition.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkColorFilter::Table", "SkColorFilter::TableARGB", "SkColorFilter::Blend", "SkColorFilter::makeComposed", "SkImageFilter::ColorFilter"], "notes": "Visually interesting demonstration of color transformations and filter composition.", "sampleStatus": "existing", "matchedSample": "Photo Lab"}, {"file": "textblobcolortrans.cpp", "name": "TextBlob Color Translation", "description": "Tests text blob rendering with color transformations and translated positions, verifying correct atlas handling.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkTextBlob", "SkTextBlobBuilder", "SkFont", "SkCanvas::drawTextBlob", "SkPaint::setColor"], "notes": "Tests GPU text blob caching with A8 masks.", "sampleStatus": "existing", "matchedSample": "Text Lab"}, {"file": "textblobmixedsizes.cpp", "name": "TextBlob Mixed Font Sizes", "description": "Tests text blob rendering with mixed font sizes and optional distance field text rendering with blur effects.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkTextBlob", "SkTextBlobBuilder", "SkFont", "SkSurface", "SkMaskFilter::MakeBlur"], "notes": "Tests distance field text rendering and mixed glyph sizes.", "sampleStatus": "existing", "matchedSample": "Text Lab"}, {"file": "textblobshader.cpp", "name": "TextBlob with Shader", "description": "Exercises how shaders apply to text blobs at different positions and how shader space behaves relative to blob offset.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkTextBlob", "SkTextBlobBuilder", "SkPaint::setShader", "SkShaders::RadialGradient", "SkCanvas::drawTextBlob"], "notes": "Demonstrates shader coordinate system behavior with text blobs.", "sampleStatus": "existing", "matchedSample": "Shader Playground"}, {"file": "textblobuseithit.cpp", "name": "TextBlob Underline Intercepts", "description": "Demonstrates using SkTextBlob getIntercepts() to find intersection points for drawing intelligent underlines avoiding descenders.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkTextBlob", "SkTextBlob::getIntercepts", "SkTextBlobBuilder", "SkPath"], "notes": "Tests advanced text feature: intercept queries for sophisticated text decorations.", "sampleStatus": "existing", "matchedSample": "Text Lab"}, {"file": "thinconcavepaths.cpp", "name": "Thin Concave Path Rendering", "description": "Tests rendering of thin (< 1 pixel) concave and complex paths at various widths to verify proper rasterization.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkPath", "SkPathBuilder", "SkPaint", "SkCanvas::drawPath"], "notes": "Stress test for path rasterization with thin geometry edge cases.", "sampleStatus": "existing", "matchedSample": "Path Builder"}, {"file": "tilemodes_scaled.cpp", "name": "Tile Modes with Scaled Sampling", "description": "Tests tile mode behavior with various sampling methods (Nearest, Linear, Trilinear, Mitchell, Aniso) on scaled bitmap and gradient shaders.", "interesting": "medium", "apis_available": true, "missing_apis": [], "key_apis": ["SkBitmap", "SkShader", "SkTileMode", "SkSamplingOptions", "SkShaders::LinearGradient", "SkShaders::RadialGradient"], "notes": "Comprehensive test of sampling modes with tile modes.", "sampleStatus": "existing", "matchedSample": "2D Transforms"}, {"file": "animated_gif.cpp", "name": "Animated GIF", "description": "Renders animated GIF frames using SkCodec, displaying all frames in a grid and animating one frame. Shows codec frame management and drawing.", "interesting": "medium", "apis_available": false, "missing_apis": ["SkAnimCodecPlayer"], "key_apis": ["SKCodec", "SKCodec.getFrameInfo", "SKCodec.getPixels", "SKCanvas.drawImage", "SKBitmap"], "notes": "Uses SkAnimCodecPlayer which is internal. Core GIF decoding works, but animation player is not available.", "sampleStatus": "existing", "matchedSample": "GIF Player"}, {"file": "coordclampshader.cpp", "name": "Coord Clamp Shader", "description": "Demonstrates the CoordClampShader functionality that clamps image sampling to specific rectangular regions with various transform matrices and mipmapping modes.", "interesting": "medium", "apis_available": false, "missing_apis": ["SKShaders.CoordClamp"], "key_apis": ["SkShaders::CoordClamp", "SkImage::makeShader", "SkShaders::SweepGradient", "SkCanvas::drawRect", "SkSamplingOptions"], "notes": "CoordClampShader is not wrapped in SkiaSharp", "sampleStatus": "existing", "matchedSample": "Shader Playground"}, {"file": "mixercolorfilter.cpp", "name": "Mixer Color Filter", "description": "Demonstrates color filter interpolation with Lerp to blend between two color filters, testing tint filters and matrix color operations.", "interesting": "medium", "apis_available": false, "missing_apis": ["SkColorFilters::Lerp"], "key_apis": ["SkColorFilter", "SkColorFilters::Matrix", "SkLumaColorFilter", "SkColorFilters::Compose"], "notes": "Uses SkColorFilters::Lerp which is not exposed in SkiaSharp.", "sampleStatus": "existing", "matchedSample": "Photo Lab"}, {"file": "shadermaskfilter.cpp", "name": "Shader Mask Filter", "description": "Demonstrates using a gradient shader as a mask filter to create alpha-based shape effects on a red oval.", "interesting": "medium", "apis_available": false, "missing_apis": ["SkShaderMaskFilter::Make"], "key_apis": ["SkShaderMaskFilter::Make", "SkShaders::LinearGradient", "SkMaskFilter", "SkCanvas::drawOval"], "notes": "Uses SkShaderMaskFilter which is not directly available in SkiaSharp.", "sampleStatus": "existing", "matchedSample": "Shader Playground"}, {"file": "arcofzorro.cpp", "name": "Arc of Zorro", "description": "Stress test of drawArc near singularities by drawing many arcs in a Z-shaped pattern with varying angles.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SKCanvas.drawArc", "SKPaint.setStrokeWidth"], "notes": "Regression/stress test for arc rendering edge cases. Not visually interesting but important for correctness.", "sampleStatus": "existing", "matchedSample": "Path Builder"}, {"file": "blurpositioning.cpp", "name": "Blur Positioning", "description": "Tests proper positioning and centering of blurred rectangles at small sigma values, verifying correct border calculation.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkImageFilters::Blur", "SkPaint", "SkCanvas", "SkRect"], "notes": "Regression test for blur positioning at sigma range 0.0 to 1.2", "sampleStatus": "existing", "matchedSample": "Blur Image Filter"}, {"file": "blurquickreject.cpp", "name": "Blur Quick Reject", "description": "Tests blur mask filter quick rejection bounds, verifying that 3-sigma bounds are used correctly for clipping instead of just the blur radius.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkMaskFilter::MakeBlur", "SkCanvas::clipRect", "SkPaint", "SkRect"], "notes": "Internal optimization test for blur quick-reject behavior", "sampleStatus": "existing", "matchedSample": "Blur Image Filter"}, {"file": "blurredclippedcircle.cpp", "name": "Blurred Clipped Circle", "description": "Tests precision artifacts in circle blur effects when centers are clipped, using oval RRect with difference clip operation.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkMaskFilter::MakeBlur", "SkRRect", "SkCanvas::clipRRect", "SkColorFilter", "SkBlendMode"], "notes": "Regression test for crbug.com/560651", "sampleStatus": "existing", "matchedSample": "Blur Image Filter"}, {"file": "collapsepaths.cpp", "name": "Collapse Paths", "description": "Tests path rendering with degenerate paths and edge cases involving collapsing coordinates and fill types. Demonstrates path construction and rendering robustness.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SKCanvas.drawPath", "SKPaint", "SKPathBuilder", "SKPathFillType"], "notes": "Path rendering edge case testing. Tests basic path APIs that are fully available in SkiaSharp.", "sampleStatus": "existing", "matchedSample": "Path Builder"}, {"file": "colorfilteralpha8.cpp", "name": "Color Filter Alpha8", "description": "Tests color filter application on Alpha8 bitmaps, specifically applying a color matrix to alpha-only images to verify proper color channel handling.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SKBitmap", "SKImageInfo.MakeA8", "SKColorFilter.Matrix", "SKCanvas.drawImage", "SKPaint"], "notes": "Simple color filter test on alpha-only images. All APIs are available in SkiaSharp.", "sampleStatus": "existing", "matchedSample": "Photo Lab"}, {"file": "imagefiltersbigtile.cpp", "name": "Image Filters Big Tile", "description": "Tests image filter performance and correctness with large tile sizes, demonstrating tiling behavior for image filter operations.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkImageFilter", "SkCanvas", "SkPaint"], "notes": "File not found in google/skia repository (may have been removed or renamed). Performance/stress test.", "sampleStatus": "existing", "matchedSample": "Photo Lab"}, {"file": "largeclippedpath.cpp", "name": "Large Clipped Path with Flower", "description": "Tests GPU path triangulation with complex clipping patterns, drawing a flower shape with petals clipped by alternating grid rectangles.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::clipPath", "SkCanvas::drawPath", "SkPathBuilder", "SkPathFillType"], "notes": "GPU-specific test for Ganesh PathInnerTriangulateOp stencil settings.", "sampleStatus": "existing", "matchedSample": "Path Builder"}, {"file": "manypaths.cpp", "name": "Many Paths", "description": "Stress test that draws thousands of small circles and rounded rectangles to test rendering performance with many primitives.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkCanvas::drawOval", "SkCanvas::drawRRect", "SkPaint"], "notes": "Pure stress test. Can be reproduced in SkiaSharp but only shows performance characteristics.", "sampleStatus": "existing", "matchedSample": "Path Builder"}, {"file": "pathmeasure.cpp", "name": "Path Measure Stress Test", "description": "Regression test for path measure overflow bug (skbug.com/40038934). Constructs a massive path to trigger integer overflow in measurement.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkPathBuilder", "SkDashPathEffect::Make", "SkPathMeasure"], "notes": "Bug regression test. Test code is mostly disabled (#if 0).", "sampleStatus": "existing", "matchedSample": "Path Builder"}, {"file": "testgradient.cpp", "name": "Basic Gradient Test", "description": "Simple test drawing basic shapes with a linear gradient shader to demonstrate gradient rendering.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkPaint", "SkShader", "SkShaders::LinearGradient", "SkCanvas::drawRect"], "notes": "Basic test case; not particularly visually interesting.", "sampleStatus": "existing", "matchedSample": "Gradient"}, {"file": "textblobblockreordering.cpp", "name": "TextBlob Block Reordering", "description": "Tests that text blobs render correctly when draw order differs from flush order due to different blend modes causing re-batching.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkTextBlob", "SkTextBlobBuilder", "SkFont", "SkCanvas::drawTextBlob", "SkBlendMode"], "notes": "GPU batching/reordering regression test.", "sampleStatus": "existing", "matchedSample": "Text Lab"}, {"file": "textblobgeometrychange.cpp", "name": "TextBlob Pixel Geometry Change", "description": "Tests that LCD text rendering correctly handles pixel geometry changes and disables LCD text when appropriate.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkTextBlob", "SkTextBlobBuilder", "SkFont", "SkSurfaceProps", "SkPixelGeometry"], "notes": "Regression test for crbug/486744.", "sampleStatus": "existing", "matchedSample": "Text Lab"}, {"file": "tiledscaledbitmap.cpp", "name": "Tiled Bitmap Fractional Scaling", "description": "Regression test for tiled bitmap shader failing with fractional image scaling.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkBitmap", "SkPaint", "SkShader", "SkBitmap::makeShader", "SkTileMode::kRepeat"], "notes": "Bug regression test (skbug.com/40034014).", "sampleStatus": "existing", "matchedSample": "2D Transforms"}, {"file": "variedtext.cpp", "name": "Varied Text Rendering", "description": "Renders randomly-configured text with different fonts, sizes, colors, and clip rectangles to benchmark GPU backend text draw batching.", "interesting": "low", "apis_available": true, "missing_apis": [], "key_apis": ["SkFont", "SkTypeface", "SkPaint", "SkCanvas"], "notes": "GPU backend batching stress test. Creates 30 text draws with random parameters.", "sampleStatus": "existing", "matchedSample": "Text Lab"}, {"file": "asyncrescaleandread.cpp", "name": "Async Rescale and Read", "description": "Tests GPU async pixel readback with rescaling to RGBA, YUV, and YUVA formats using GrDirectContext and Graphite APIs.", "interesting": "low", "apis_available": false, "missing_apis": ["asyncRescaleAndReadPixels", "asyncRescaleAndReadPixelsYUVA420", "asyncRescaleAndReadPixelsYUV420", "GrDirectContext", "Graphite APIs"], "key_apis": ["GrDirectContext", "Graphite Context", "asyncRescaleAndReadPixels"], "notes": "GPU-backend-specific test for async readback. Not available in SkiaSharp. Uses Ganesh and Graphite internals.", "sampleStatus": "existing", "matchedSample": "2D Transforms"}, {"file": "beziereffects.cpp", "name": "Bezier GPU Effects", "description": "Tests GPU-accelerated bezier curve rendering using GrGeometryProcessor with conic and quadratic bezier curves.", "interesting": "low", "apis_available": false, "missing_apis": ["GrGeometryProcessor", "GrMeshDrawOp", "GrBezierEffect", "SurfaceDrawContext"], "key_apis": ["SkCanvas::drawRect"], "notes": "GPU backend-specific test requiring internal Ganesh effect APIs not exposed in SkiaSharp", "sampleStatus": "existing", "matchedSample": "Path Builder"}, {"file": "compose_color_filter.cpp", "name": "Compose Color Filter", "description": "File does not exist in current google/skia repository (likely removed or renamed).", "interesting": "low", "apis_available": false, "missing_apis": [], "key_apis": [], "notes": "File not found at gm/compose_color_filter.cpp in current Skia HEAD", "sampleStatus": "existing", "matchedSample": "Path Effects Lab"}, {"file": "compressed_textures.cpp", "name": "Compressed Textures", "description": "Tests GPU support for ETC2 and BC1 compressed texture formats with mipmapping, including edge cases for non-power-of-two and non-multiple-of-four dimensions.", "interesting": "low", "apis_available": false, "missing_apis": ["GrDirectContext", "GrBackendTexture", "SkTextureCompressionType", "SkCompressedDataUtils"], "key_apis": ["SkCanvas", "SkImage", "SkBitmap", "SkPath", "SkPaint", "SkSurface"], "notes": "GPU-backend-specific; uses internal Ganesh/Graphite compressed texture APIs not available in SkiaSharp", "sampleStatus": "existing", "matchedSample": "Text Lab"}, {"file": "crosscontextimage.cpp", "name": "Cross-Context GPU Image Transfer", "description": "Tests creation and manipulation of images that can be shared between different GPU rendering contexts.", "interesting": "low", "apis_available": false, "missing_apis": ["GrDirectContext", "SkImages::CrossContextTextureFromPixmap"], "key_apis": ["SkImages::DeferredFromEncodedData", "SkImages::CrossContextTextureFromPixmap", "SkImage::makeSubset"], "notes": "GPU-backend-specific; requires direct context and cross-context texture APIs not exposed in SkiaSharp", "sampleStatus": "existing", "matchedSample": "Text Lab"}, {"file": "draw_quad_set_transforms.cpp", "name": "Draw Quad Set Transforms", "description": "File does not exist in current google/skia repository (likely removed or renamed).", "interesting": "low", "apis_available": false, "missing_apis": [], "key_apis": [], "notes": "File not found at gm/draw_quad_set_transforms.cpp in current Skia HEAD", "sampleStatus": "existing", "matchedSample": "2D Transforms"}, {"file": "gpu_blur_utils.cpp", "name": "GPU Blur Utilities", "description": "Tests GPU-accelerated Gaussian blur utilities with different tile modes and source rectangle configurations using internal Ganesh GPU backend APIs.", "interesting": "low", "apis_available": false, "missing_apis": ["GrRecordingContext", "GrBlurUtils::GaussianBlur", "GrSurfaceProxyView", "SurfaceDrawContext", "GrTextureEffect"], "key_apis": ["GrRecordingContext", "GrBlurUtils", "GrSurfaceProxyView", "GrImageInfo"], "notes": "GPU backend-specific internal stress test for Ganesh blur pipeline. Not reproducible in SkiaSharp.", "sampleStatus": "existing", "matchedSample": "Blur Image Filter"}, {"file": "gradients_local.cpp", "name": "Gradients with Local Perspective", "description": "File does not exist in the current google/skia repository. Gradient local perspective tests are part of gradients.cpp.", "interesting": "low", "apis_available": false, "missing_apis": [], "key_apis": [], "notes": "File not found in google/skia repo. Functionality covered by gradients.cpp GradientsLocalPerspectiveGM.", "sampleStatus": "existing", "matchedSample": "Gradient"}, {"file": "image_from_yuv_textures.cpp", "name": "Image From YUV Textures (underscore variant)", "description": "File does not exist in the current google/skia repository. See imagefromyuvtextures.cpp instead.", "interesting": "low", "apis_available": false, "missing_apis": ["SkImages::TextureFromYUVATextures"], "key_apis": [], "notes": "File not found. The actual file is imagefromyuvtextures.cpp (no underscores).", "sampleStatus": "existing", "matchedSample": "Text Lab"}, {"file": "imagefromyuvtextures.cpp", "name": "Image From YUV Textures", "description": "Tests creating images from YUV texture planes with different sampling modes, color spaces, and drawing methods. GPU-backend specific.", "interesting": "low", "apis_available": false, "missing_apis": ["SkImages::TextureFromYUVATextures", "GrDirectContext", "Graphite recorder"], "key_apis": ["SkImage", "SkYUVAPixmaps", "SkSurface (GPU)", "SkSamplingOptions"], "notes": "GPU-backend-specific test. YUV texture operations not exposed in SkiaSharp.", "sampleStatus": "existing", "matchedSample": "Text Lab"}, {"file": "imagepalette.cpp", "name": "Image Palette", "description": "File does not exist in the current google/skia repository.", "interesting": "low", "apis_available": false, "missing_apis": [], "key_apis": [], "notes": "File not found in google/skia repo at gm/imagepalette.cpp.", "sampleStatus": "existing", "matchedSample": "Color Fonts"}, {"file": "imagescalealigned.cpp", "name": "Image Scale Aligned", "description": "File does not exist in the current google/skia repository.", "interesting": "low", "apis_available": false, "missing_apis": [], "key_apis": [], "notes": "File not found in google/skia repo at gm/imagescalealigned.cpp.", "sampleStatus": "existing", "matchedSample": "2D Transforms"}, {"file": "manypathatlases.cpp", "name": "Many Path Atlases", "description": "GPU stress test for path atlas management - tests what happens when many paths exceed atlas capacity.", "interesting": "low", "apis_available": false, "missing_apis": ["GrDirectContext", "GrContextOptions", "Atlas configuration"], "key_apis": ["SkPath", "SkCanvas::clipPath", "SkCanvas::drawPath"], "notes": "GPU backend stress test (Ganesh/Graphite). Not reproducible in SkiaSharp.", "sampleStatus": "existing", "matchedSample": "Path Builder"}, {"file": "mesh.cpp", "name": "Custom Mesh Specification", "description": "Comprehensive test of custom mesh rendering with SkMesh and SkMeshSpecification, including vertex/index buffers, custom shaders, and color spaces.", "interesting": "low", "apis_available": false, "missing_apis": ["SkMesh", "SkMeshSpecification", "SkMeshes::CopyVertexBuffer", "SkMeshes::CopyIndexBuffer", "SkCanvas::drawMesh"], "key_apis": ["SkMesh", "SkMeshSpecification", "SkCanvas::drawMesh"], "notes": "SkMesh is NOT exposed in SkiaSharp. Modern GPU feature not available.", "sampleStatus": "existing", "matchedSample": "Vertex Mesh"}, {"file": "msh_sksl_colorspace.cpp", "name": "SkSL Mesh Color Space", "description": "File does not exist in the current google/skia repository.", "interesting": "low", "apis_available": false, "missing_apis": [], "key_apis": [], "notes": "File not found in google/skia repo at gm/msh_sksl_colorspace.cpp.", "sampleStatus": "existing", "matchedSample": "Shader Playground"}, {"file": "pdf_never_embed.cpp", "name": "PDF Font Embedding Control", "description": "Tests font rendering with typefaces that should never be embedded in PDF output, demonstrating text positioning and transformation.", "interesting": "low", "apis_available": false, "missing_apis": ["PDF backend/embedding control"], "key_apis": ["SkCanvas::drawTextBlob", "SkFont::textToGlyphs", "SkTypeface", "SkTextBlobBuilder"], "notes": "PDF-specific test. Font embedding control not exposed in SkiaSharp.", "sampleStatus": "existing", "matchedSample": "PDF Composer"}, {"file": "persp_shaders_aa.cpp", "name": "Perspective Shaders Anti-Aliasing", "description": "File does not exist in the current google/skia repository.", "interesting": "low", "apis_available": false, "missing_apis": [], "key_apis": [], "notes": "File not found in google/skia repo at gm/persp_shaders_aa.cpp.", "sampleStatus": "existing", "matchedSample": "Shader Playground"}, {"file": "png_codec.cpp", "name": "PNG Codec", "description": "File not found in google/skia gm/ directory.", "interesting": "low", "apis_available": false, "missing_apis": [], "key_apis": [], "notes": "File does not exist at gm/png_codec.cpp path.", "sampleStatus": "existing", "matchedSample": "Image Decoder"}, {"file": "runtimeeffect.cpp", "name": "Runtime Effect", "description": "File not found in google/skia gm/ directory.", "interesting": "low", "apis_available": false, "missing_apis": [], "key_apis": [], "notes": "File does not exist at gm/runtimeeffect.cpp.", "sampleStatus": "existing", "matchedSample": "Shader Playground"}, {"file": "shapes_as_paths.cpp", "name": "Shapes as Paths", "description": "File not found in google/skia gm/ directory.", "interesting": "low", "apis_available": false, "missing_apis": [], "key_apis": [], "notes": "File does not exist at gm/shapes_as_paths.cpp.", "sampleStatus": "existing", "matchedSample": "Path Builder"}, {"file": "textbloblooper.cpp", "name": "TextBlob Draw Looper", "description": "File not found in google/skia gm/ directory. SkDrawLooper is deprecated.", "interesting": "low", "apis_available": false, "missing_apis": ["SkDrawLooper"], "key_apis": [], "notes": "File does not exist at gm/textbloblooper.cpp. SkDrawLooper is deprecated and not available in SkiaSharp.", "sampleStatus": "existing", "matchedSample": "Text Lab"}, {"file": "textblobrandomfont.cpp", "name": "TextBlob Random Font", "description": "Tests text blob rendering with a random typeface that produces non-deterministic glyphs for GPU caching stress testing.", "interesting": "low", "apis_available": false, "missing_apis": ["SkRandomTypeface"], "key_apis": ["SkTextBlob", "SkTextBlobBuilder", "SkFont", "SkTypeface", "SkCanvas::drawTextBlob"], "notes": "GPU-only stress test using internal SkRandomTypeface.", "sampleStatus": "existing", "matchedSample": "Text Lab"}, {"file": "video_decoder.cpp", "name": "Video Decoder Sample", "description": "Demonstrates video decoding capabilities using SkVideoDecoder to load and display MP4 video frames with animation support.", "interesting": "low", "apis_available": false, "missing_apis": ["SkVideoDecoder"], "key_apis": ["SkCanvas", "SkImage", "SkVideoDecoder"], "notes": "Requires experimental FFmpeg integration and GPU recording context. Not available in SkiaSharp.", "sampleStatus": "existing", "matchedSample": "Image Decoder"}];
let fI=new Set(),fA=new Set(),fS=new Set(),sT='';
function esc(s){const d=document.createElement('div');d.textContent=s||'';return d.innerHTML;}
function tF(type,val){const m={interest:fI,avail:fA,status:fS};const f=m[type];f.has(val)?f.delete(val):f.add(val);applyFilters();}
function applyFilters(){
sT=document.getElementById('search').value.toLowerCase();
const filtered=DATA.filter(f=>{
if(fI.size&&!fI.has(f.interesting))return false;
if(fA.size){const av=f.apis_available?'yes':'no';if(!fA.has(av))return false;}
if(fS.size&&!fS.has(f.sampleStatus))return false;
if(sT&&!JSON.stringify(f).toLowerCase().includes(sT))return false;
return true;
});
document.getElementById('filter-count').textContent='Showing '+filtered.length+' of '+DATA.length;
document.getElementById('list').innerHTML=filtered.map(renderRow).join('');
document.querySelectorAll('.pill[data-filter]').forEach(p=>{
const[t,v]=p.dataset.filter.split(':');
const m={interest:fI,avail:fA,status:fS};
const f=m[t];if(f)p.classList.toggle('dim',f.size>0&&!f.has(v));
});
}
function renderRow(f){
const gh='https://github.com/google/skia/blob/main/gm/'+f.file;
const ssLabels={none:'πŸ†• No existing',similar:'πŸ”Ά Similar exists',existing:'βœ… Already covered'};
const missing=(f.missing_apis||[]).map(a=>'<code>'+esc(a)+'</code>').join(', ')||'';
const apis=(f.key_apis||[]).map(a=>'<code>'+esc(a)+'</code>').join(', ')||'β€”';
let det='<div class="detail-grid">';
det+='<div class="detail-label">Key APIs</div><div class="detail-value">'+apis+'</div>';
if(!f.apis_available&&missing)det+='<div class="detail-label">Missing</div><div class="detail-value" style="color:#991b1b">'+missing+'</div>';
if(f.matchedSample)det+='<div class="detail-label">Matched</div><div class="detail-value">Gallery: <strong>'+esc(f.matchedSample)+'</strong></div>';
if(f.notes)det+='<div class="detail-label">Notes</div><div class="detail-value">'+esc(f.notes)+'</div>';
det+='<div class="detail-label">Source</div><div class="detail-value"><a href="'+gh+'" target="_blank">gm/'+esc(f.file)+'</a></div>';
det+='</div>';
return '<div class="row-item" onclick="this.classList.toggle(\'expanded\')"><div class="d-flex align-items-start"><span class="row-chevron">β–Ά</span><div style="flex:1"><div class="row-name">'+esc(f.name||f.file)+' <span class="pill i-'+f.interesting+'" data-filter="interest:'+f.interesting+'" onclick="event.stopPropagation();tF(\'interest\',\''+f.interesting+'\')">'+f.interesting+'</span> <span class="pill '+(f.apis_available?'a-yes':'a-no')+'" data-filter="avail:'+(f.apis_available?'yes':'no')+'" onclick="event.stopPropagation();tF(\'avail\',\''+(f.apis_available?'yes':'no')+'\')">'+( f.apis_available?'βœ… APIs':'❌ APIs')+'</span> <span class="pill ss-'+f.sampleStatus+'" data-filter="status:'+f.sampleStatus+'" onclick="event.stopPropagation();tF(\'status\',\''+f.sampleStatus+'\')">'+ssLabels[f.sampleStatus]+'</span></div><div class="row-desc">'+esc(f.description)+'</div><div class="row-detail">'+det+'</div></div></div></div>';
}
document.addEventListener('DOMContentLoaded',()=>{
const high=DATA.filter(f=>f.interesting==='high').length;
const med=DATA.filter(f=>f.interesting==='medium').length;
const low=DATA.filter(f=>f.interesting==='low').length;
const avail=DATA.filter(f=>f.apis_available).length;
const blocked=DATA.filter(f=>!f.apis_available).length;
const none=DATA.filter(f=>f.sampleStatus==='none').length;
const similar=DATA.filter(f=>f.sampleStatus==='similar').length;
const existing=DATA.filter(f=>f.sampleStatus==='existing').length;
const opportunity=DATA.filter(f=>f.interesting==='high'&&f.apis_available&&f.sampleStatus==='none').length;
document.getElementById('summary-bar').innerHTML=[
['Total',DATA.length,'#1f2328'],['High',high,'#166534'],['Medium',med,'#92400e'],['Low',low,'#6b7280'],
['APIs Ready',avail,'#166534'],['Blocked',blocked,'#991b1b'],
['πŸ†• New',none,'#1e40af'],['πŸ”Ά Similar',similar,'#92400e'],['βœ… Covered',existing,'#6b7280'],
['🎯 Opportunity',opportunity,'#7e22ce']
].map(([l,n,c])=>'<div class="text-center"><div class="summary-num" style="color:'+c+'">'+n+'</div><div class="summary-label">'+l+'</div></div>').join('');
document.getElementById('fr-interest').innerHTML=['high','medium','low'].map(v=>'<span class="pill i-'+v+'" data-filter="interest:'+v+'" onclick="tF(\'interest\',\''+v+'\')">'+v+'</span>').join(' ');
document.getElementById('fr-avail').innerHTML=['yes','no'].map(v=>'<span class="pill a-'+v+'" data-filter="avail:'+v+'" onclick="tF(\'avail\',\''+v+'\')">'+(v==='yes'?'βœ… APIs ready':'❌ Blocked')+'</span>').join(' ');
document.getElementById('fr-status').innerHTML=['none','similar','existing'].map(v=>'<span class="pill ss-'+v+'" data-filter="status:'+v+'" onclick="tF(\'status\',\''+v+'\')">'+(({none:'πŸ†• No existing',similar:'πŸ”Ά Similar',existing:'βœ… Covered'})[v])+'</span>').join(' ');
applyFilters();
});
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment