Skip to content

Add configurable ResizeQuality for Resizetizer - #34559

Merged
kubaflo merged 30 commits into
net11.0from
feature/resizetizer-configurable-filter-quality
Aug 7, 2026
Merged

Add configurable ResizeQuality for Resizetizer#34559
kubaflo merged 30 commits into
net11.0from
feature/resizetizer-configurable-filter-quality

Conversation

@jfversluis

@jfversluis jfversluis commented Mar 19, 2026

Copy link
Copy Markdown
Member

Note

Are you waiting for the changes in this PR to be merged?
It would be very helpful if you could test the resulting artifacts from this PR and let us know in a comment if this change resolves your issue. Thank you!

Description

Adds a configurable ResizeQuality option to Resizetizer, allowing developers to control image resampling quality when resizing images.

This is a clean re-implementation of community PR #25686 (by @thisisthekap), rebased onto net11.0 and updated based on review feedback.

Key changes

  • Adds a new ResizeQuality enum with Auto (default), Best, and Fastest values.

  • Adds ResizeQuality MSBuild metadata support, for example:

    <MauiImage Include="Resources\Images\photo.png" ResizeQuality="Fastest" />
  • Maps ResizeQuality to SkiaSharp SKSamplingOptions instead of the obsolete Paint.FilterQuality path.

  • Preserves existing behavior for Auto, including default output compatibility.

  • Propagates quality metadata through app icons, adaptive icons, monochrome icons, splash images, and generated image inputs so metadata-only changes correctly invalidate outputs.

  • Preserves quality when themed splash processing clones Apple light/dark assets and creates Android dark/night variants.

  • Applies quality choices consistently for raster and SVG resizing, including SVG upscale/downscale paths, tint handling, and fractional SVG dimensions.

  • Adds a defensive in-tree BuildTasks import guard in Maui.InTree.props / Maui.InTree.targets so partial .buildtasks outputs do not fail with missing Core or Resizetizer props/targets imports before the friendly BuildTasks diagnostic can run.

Quality mappings

ResizeQuality Sampling behavior Use case
Auto Existing default behavior Back-compatible default
Best Mitchell cubic resampler for raster/downscale paths; keeps vector rendering for SVG upscales Highest quality output
Fastest Nearest-neighbor sampling, no mipmaps Fast builds, pixel art

Tests

Adds and updates Resizetizer unit coverage for:

  • Sampling option mapping for all quality values.
  • Functional pixel-difference behavior between quality modes.
  • Default/explicit Auto compatibility.
  • Raster, SVG, app icon, adaptive icon, monochrome icon, and splash quality propagation.
  • Apple light/dark themed splash assets and Android dark/night splash variants through the production tasks.
  • Metadata-aware incremental invalidation.
  • End-to-end MSBuild task pipeline coverage.
  • Defensive BuildTasks import guard behavior.

Validation

Latest maui-pr run is green: https://dev.azure.com/dnceng-public/public/_build/results?buildId=1544479

Fixes #25750

Copilot AI review requested due to automatic review settings March 19, 2026 09:40
@github-actions

github-actions Bot commented Mar 19, 2026

Copy link
Copy Markdown
Contributor

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 34559

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 34559"

@jfversluis
jfversluis requested a review from mattleibow March 19, 2026 09:44
@jfversluis jfversluis added the area-single-project Splash Screen, Multi-Targeting, MauiFont, MauiImage, MauiAsset, Resizetizer label Mar 19, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds a configurable ResizeQuality option to Resizetizer so image resampling quality can be controlled via MSBuild metadata, while keeping existing behavior unchanged by default (Auto).

Changes:

  • Introduces an internal ResizeQuality enum and plumbs it through ResizeImageInfo → tool creation → resize operations.
  • Replaces use of obsolete SKPaint.FilterQuality with explicit SKSamplingOptions selection based on ResizeQuality.
  • Adds unit + end-to-end tests validating parsing, sampling-option mapping, and output differences/regressions.

Reviewed changes

Copilot reviewed 13 out of 13 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src/SingleProject/Resizetizer/src/ResizeQuality.cs Adds the ResizeQuality enum used to control resampling behavior.
src/SingleProject/Resizetizer/src/ResizeImageInfo.cs Adds Quality property + parses ResizeQuality MSBuild metadata.
src/SingleProject/Resizetizer/src/SkiaSharpTools.cs Adds quality-aware factory/ctor and maps ResizeQuality to SKSamplingOptions.
src/SingleProject/Resizetizer/src/SkiaSharpRasterTools.cs Passes quality through constructor chain; raster draw uses SamplingOptions.
src/SingleProject/Resizetizer/src/SkiaSharpSvgTools.cs Passes quality through; uses SamplingOptions for raster downscaling path.
src/SingleProject/Resizetizer/src/SkiaSharpImaginaryTools.cs Updates base ctor call to include default quality.
src/SingleProject/Resizetizer/src/SkiaSharpAppIconTools.cs Ensures app icon background/foreground tool creation respects info.Quality.
src/SingleProject/Resizetizer/src/Resizer.cs Threads Info.Quality into tool creation.
src/SingleProject/Resizetizer/src/AndroidAdaptiveIconGenerator.cs Threads Info.Quality into adaptive icon resizing.
src/SingleProject/Resizetizer/test/UnitTests/ResizeImageInfoTests.cs Adds tests for defaulting + case-insensitive parsing + invalid value handling.
src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs Adds sampling-option mapping tests and functional output comparisons for raster images.
src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs Adds sampling-option mapping tests and functional output comparisons for SVG downscaling.
src/SingleProject/Resizetizer/test/UnitTests/ResizetizeImagesTests.cs Adds end-to-end MSBuild task pipeline tests for ResizeQuality.

You can also share your feedback on Copilot code review. Take the survey.

Comment thread src/SingleProject/Resizetizer/test/UnitTests/ResizetizeImagesTests.cs Outdated
Comment thread src/SingleProject/Resizetizer/src/ResizeQuality.cs Outdated
@jfversluis
jfversluis requested a review from Copilot March 19, 2026 09:50

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds a configurable ResizeQuality option to the Resizetizer pipeline so callers can control image resampling behavior (via MSBuild item metadata), while preserving the existing default output.

Changes:

  • Introduces an internal ResizeQuality enum and plumbs it through ResizeImageInfo parsing and all resizing/tooling entry points.
  • Switches resampling control to SKSamplingOptions (removing the obsolete SKPaint.FilterQuality usage) and maps ResizeQuality values to the desired sampling options.
  • Adds unit and end-to-end tests covering parsing, sampling option mapping, and output equivalence/differences.

Reviewed changes

Copilot reviewed 13 out of 13 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
src/SingleProject/Resizetizer/src/ResizeQuality.cs Adds the new ResizeQuality enum used to select resampling behavior.
src/SingleProject/Resizetizer/src/ResizeImageInfo.cs Adds Quality with default, and parses ResizeQuality from MSBuild metadata.
src/SingleProject/Resizetizer/src/SkiaSharpTools.cs Plumbs ResizeQuality into constructors/factories and maps it to SKSamplingOptions; removes obsolete FilterQuality.
src/SingleProject/Resizetizer/src/SkiaSharpRasterTools.cs Threads quality through constructors so raster drawing uses the configured sampling.
src/SingleProject/Resizetizer/src/SkiaSharpSvgTools.cs Threads quality through constructors so SVG downscaling uses the configured sampling.
src/SingleProject/Resizetizer/src/SkiaSharpImaginaryTools.cs Updates base constructor call to provide a default ResizeQuality for manufactured images.
src/SingleProject/Resizetizer/src/Resizer.cs Ensures ResizeQuality flows into SkiaSharpTools.Create(...) when resizing.
src/SingleProject/Resizetizer/src/SkiaSharpAppIconTools.cs Ensures app icon background/foreground tool creation passes through ResizeQuality.
src/SingleProject/Resizetizer/src/AndroidAdaptiveIconGenerator.cs Ensures adaptive icon background/foreground resizing passes through ResizeQuality.
src/SingleProject/Resizetizer/test/UnitTests/ResizeImageInfoTests.cs Adds tests for defaulting and case-insensitive parsing of ResizeQuality metadata.
src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs Adds tests validating sampling option mapping and output invariants/differences for raster resizing.
src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs Adds tests validating sampling option mapping and output invariants/differences for SVG resizing.
src/SingleProject/Resizetizer/test/UnitTests/ResizetizeImagesTests.cs Adds end-to-end MSBuild pipeline tests verifying metadata is respected and defaults preserve baseline behavior.

You can also share your feedback on Copilot code review. Take the survey.

Comment thread src/SingleProject/Resizetizer/src/ResizeQuality.cs Outdated
@kubaflo

kubaflo commented Apr 3, 2026

Copy link
Copy Markdown
Contributor

Code Review Summary

ResizeQuality for Resizetizer — Adds Auto/Best/Fastest quality options, replaces deprecated Paint.FilterQuality with SKSamplingOptions. 37 new tests including pixel-comparison regression tests. Backward compatible (Auto = previous behavior).

Findings

Severity Finding
🔴 Critical Missing </summary> closing tag on Best enum member XML doc in ResizeQuality.cs
🔴 Critical MSBuild incremental build won't detect ResizeQuality changesResizeQuality=%(ResizeQuality) is missing from the mauiimage.inputs tracking in Microsoft.Maui.Resizetizer.After.targets (line ~328). Users changing quality settings will get stale cached images unless they clean-rebuild
🟡 Warning TizenSplashUpdater.cs still uses deprecated Paint.FilterQuality (acknowledged as out of scope)
🟡 Warning No test for SkiaSharpImaginaryTools with ResizeQuality
🔵 Info Excellent backward compatibility design — Auto maps to identical sampling as previous hardcoded value
🔵 Info 37 tests with pixel-comparison regression coverage is thorough

Overall Assessment

⚠️ Needs two fixes before merge:

  1. Fix the missing </summary> XML doc tag (one-liner)
  2. Add ResizeQuality=%(ResizeQuality) to the MSBuild inputs file to avoid caching bugs

Otherwise the design, test coverage, and backward compatibility story are solid.


Review performed by Copilot CLI

@jfversluis jfversluis added this to the .NET 11.0-preview4 milestone Apr 7, 2026
@jfversluis
jfversluis force-pushed the feature/resizetizer-configurable-filter-quality branch from a438af9 to 28be2d7 Compare April 7, 2026 14:23
@kubaflo

kubaflo commented Apr 7, 2026

Copy link
Copy Markdown
Contributor

Code Review — PR #34559

Independent Assessment

What this changes: Adds configurable ResizeQuality metadata to Resizetizer, controlling image resampling via SKSamplingOptions. New internal ResizeQuality enum (Auto/Best/Fastest) maps to SkiaSharp sampling strategies. Threaded through all SkiaSharp tool constructors and factory methods. Zero behavior change for default Auto — identical output to previous hardcoded behavior.

Target branch: net11.0 — correct for new feature. Milestone .NET 11.0-preview4.

Reconciliation with PR Narrative

Agreement: ✅ Code matches description. Addresses @mattleibow's feedback on #25686: uses custom enum (not deprecated SKFilterQuality), maps to SKSamplingOptions (the actual rendering control), and Best uses SKCubicResampler.Mitchell.


Findings

✅ Good — Correct SkiaSharp API usage

The old code relied on Paint.FilterQuality which is deprecated and ignored by modern SkiaSharp. The new code explicitly passes SKSamplingOptions to canvas.DrawImage():

// SkiaSharpRasterTools.DrawUnscaled
canvas.DrawImage(img, 0, 0, SamplingOptions, Paint);

// SkiaSharpSvgTools.DrawUnscaled (downscale path)
canvas.DrawImage(img, 0, 0, SamplingOptions, Paint);

SVG upscaling (scale >= 1) correctly skips SamplingOptions — vector rendering is lossless, so canvas.DrawPicture(svg.Picture, Paint) is used directly. ✅

✅ Good — Quality mappings are well-chosen

ResizeQuality SKSamplingOptions Rationale
Auto Linear + Linear mipmaps Matches previous hardcoded behavior exactly
Best SKCubicResampler.Mitchell Industry-standard high-quality cubic resampler
Fastest Nearest, no mipmaps Zero interpolation overhead

✅ Good — Backwards compatible

  • ResizeQuality defaults to Auto via DefaultResizeQuality
  • Auto maps to the same Linear/Linear that was hardcoded before
  • Invalid MSBuild values silently fall back to Auto (via Enum.TryParse returning false)
  • Case-insensitive parsing: ResizeQuality="best" works ✅

✅ Good — Clean constructor threading

Quality parameter added to all constructor chains consistently:

  • SkiaSharpTools.Create(...) factory
  • SkiaSharpRasterTools, SkiaSharpSvgTools constructors
  • SkiaSharpImaginaryTools (passes through but doesn't use — correct, no source image to resample)
  • Resizer, SkiaSharpAppIconTools, AndroidAdaptiveIconGenerator callers

✅ Good — Incremental build support

ResizeQuality added to the _ResizetizerInputsFile line in the MSBuild targets, ensuring build is invalidated when quality changes.

✅ Good — Comprehensive tests (22 new)

  • Sampling options mapping tests for all 3 qualities × both Raster and SVG tools
  • Pixel comparison tests proving different qualities produce different output
  • Regression test: default == explicit Auto (pixel-identical)
  • Case-insensitive parsing tests
  • MSBuild metadata parsing tests

💡 Observation — SkiaSharpImaginaryTools doesn't use quality

SkiaSharpImaginaryTools (used to manufacture solid-color placeholder icons) receives ResizeQuality.Auto from CreateImaginary but never uses it for sampling — its DrawUnscaled likely just fills a solid rect. This is correct but could be documented with a brief comment in CreateImaginary:

// Quality irrelevant for imaginary tools — no source image to resample

💡 Observation — Silent fallback for invalid values

Invalid ResizeQuality metadata (e.g., ResizeQuality="Turbo") silently defaults to Auto. This is user-friendly but could be surprising. A Logger.Log warning for unrecognized values would help developers catch typos:

var rawQuality = image.GetMetadata("ResizeQuality");
if (!string.IsNullOrEmpty(rawQuality) && !Enum.TryParse<ResizeQuality>(rawQuality, ignoreCase: true, out var quality))
    Logger?.Log($"Warning: Unrecognized ResizeQuality {rawQuality}, using Auto.");

Not a blocker — just a nice-to-have for discoverability.

ℹ️ Note — ResizeQuality is internal

The enum is internal — only accessible via MSBuild metadata, not from C# code. This is correct for a build-time configuration. No PublicAPI.Unshipped.txt entries needed.

ℹ️ Note — CI Status

No CI failures detected. Clean build.


Devil's Advocate

  • "Why not expose the SkiaSharp enum directly?"@mattleibow's review on made FilterQuality configurable for Resizetizer #25686 explicitly requested a custom enum because SKFilterQuality is deprecated and SKSamplingOptions is too low-level for MSBuild metadata. The three-value abstraction is the right choice.
  • "Is Mitchell actually better than Linear for app icons?" — Mitchell cubic resampling is the industry standard for high-quality image downscaling (used by ImageMagick, libvips, etc.). For 108px→48px app icon density scaling, it preserves more detail than bilinear. Correct choice.
  • "Could the extra parameter break callers of SkiaSharpTools.Create?" — All internal callers are updated in this PR. The types are internal, so no external consumers exist.
  • "Does Fastest produce unusably bad output?" — For pixel art or development builds, nearest-neighbor is intentional. The PR title/docs make the tradeoff clear. Users opt in explicitly.

Verdict: LGTM

Confidence: high
Summary: Clean re-implementation of community PR #25686 addressing reviewer feedback. Correct SkiaSharp API migration from deprecated Paint.FilterQuality to SKSamplingOptions. Zero behavior change for default users. Well-chosen quality mappings, consistent constructor threading, comprehensive tests. Ready for merge.

Review performed by Copilot CLI using the code-review skill

kubaflo
kubaflo previously approved these changes Apr 7, 2026
@github-actions

github-actions Bot commented Apr 9, 2026

Copy link
Copy Markdown
Contributor

🧪 PR Test Evaluation

Overall Verdict: ✅ Tests are adequate

This PR adds 37 new unit tests with excellent coverage of the core ResizeQuality feature — sampling options mapping, pixel-level regression testing, case-insensitive parsing, and E2E MSBuild pipeline validation. A few minor gaps exist around app icon code paths that were modified but not directly tested.

👍 / 👎 — Was this evaluation helpful? React to let us know!

📊 Expand Full Evaluation

PR Test Evaluation Report

PR: #34559 — Add configurable ResizeQuality for Resizetizer
Test files evaluated: 4
Fix files: 10 (including new ResizeQuality.cs)


Overall Verdict

Tests are adequate

Strong unit test coverage of the core quality mapping, MSBuild metadata parsing, and pixel-level regression guarantees. Two minor gaps in coverage for the SkiaSharpAppIconTools and AndroidAdaptiveIconGenerator code paths, which were modified but not directly tested.


1. Fix Coverage — ✅

The tests trace directly to the changed code paths:

  • SkiaSharpRasterToolsTests.ResizeQualityTests verifies the SamplingOptions property is set to the correct SKSamplingOptions for each ResizeQuality value — directly testing the switch expression in SkiaSharpTools
  • SkiaSharpSvgToolsTests.ResizeQualityTests mirrors the above for SVG tools
  • ResizeImageInfoTests.ResizeQualityTests directly tests the ResizeImageInfo.Parse() method for MSBuild metadata parsing
  • ResizetizeImagesTests covers the full E2E pipeline: task creation → resize → output file

If the quality mapping switch were reverted, the sampling options correctness tests would fail. If the Enum.TryParse parsing were removed, the QualityParsedFromTaskItem tests would fail.


2. Edge Cases & Gaps — ⚠️

Covered:

  • All three ResizeQuality values (Auto, Best, Fastest) map to correct SKSamplingOptions
  • Default (no quality set) == explicit Auto at pixel level (regression guarantee)
  • Case-insensitive MSBuild metadata parsing (auto, FASTEST, best)
  • Invalid/unrecognized metadata value gracefully defaults to Auto
  • ResizeQualityMetadataIsRespectedEndToEnd — full MSBuild pipeline test
  • Fastest vs Auto produce different pixel output (raster + SVG)
  • Best vs Auto produce different pixel output (raster only)
  • All qualities produce correctly sized output (dimensions)

Missing:

  • SkiaSharpAppIconTools with qualitySkiaSharpAppIconTools was changed to pass info.Quality to SkiaSharpTools.Create for both background and foreground, but there's no test that app icon processing respects ResizeQuality. The existing SkiaSharpAppIconToolsTests are not updated with quality scenarios.
  • AndroidAdaptiveIconGenerator with quality — Similarly, adaptive icon background/foreground now pass Info.Quality, but no test covers this code path.
  • SVG: Best vs Auto pixel comparison missingSkiaSharpSvgToolsTests has DifferentQualitiesProduceDifferentPixelOutput for Fastest vs Auto, but not for Best vs Auto. The raster tests have both comparisons. (Minor: SVG rendering is vector-based so differences may be less predictable, but worth noting.)
  • Build invalidation — The .targets file was updated to include ResizeQuality in the incremental build hash. No test verifies that changing ResizeQuality triggers a rebuild (existing Resizetizer tests don't cover this, and it's a valid gap).

3. Test Type Appropriateness — ✅

Current: Unit Tests (xUnit, [Fact]/[Theory])
Recommendation: Same — this is exactly right.

Resizetizer is a build tool with no platform or UI dependency. All logic (enum mapping, SKSamplingOptions selection, pixel output) is pure, deterministic, and testable in isolation. Unit tests are the correct and optimal choice here.


4. Convention Compliance — ✅

  • Uses xUnit [Fact] and [Theory] with [InlineData]
  • Inner test class organization (e.g., ResizeQualityTests nested inside the existing test class) follows the pattern used elsewhere in the file ✅
  • IDisposable pattern used correctly for temp file cleanup in SkiaSharpRasterToolsTests and SkiaSharpSvgToolsTests
  • Test files are in the correct test project (Resizetizer.UnitTests.csproj) ✅

5. Flakiness Risk — ✅ Low

  • Tests are fully deterministic (no async, no delays, no platform-specific rendering)
  • Pixel comparison tests rely on SkiaSharp's deterministic resampling — low risk for false negatives
  • Minor theoretical risk: Assert.True(differentPixels > 0, ...) could fail if SkiaSharp changes its algorithm or if a test image happened to produce identical output at a given scale. Using a real-world photo (camera.png downscaled to 100×100) makes this unlikely.

6. Duplicate Coverage — ✅ No duplicates

This is a new feature; no existing tests cover ResizeQuality. No overlap detected.


7. Platform Scope — ✅

Resizetizer is a build-time tool with no platform-specific code. Unit tests run cross-platform (Windows, macOS, Linux). The ResizeQuality feature itself works at build time and is platform-agnostic — no additional platform-specific testing is needed.


8. Assertion Quality — ✅

Test Assertion Quality
Sampling options mapping Assert.Equal(new SKSamplingOptions(...), tools.SamplingOptions) ✅ Exact match
Pixel identity (default == Auto) Pixel-by-pixel loop Assert.Equal(pixel1, pixel2) ✅ Very strong
Pixel difference Assert.True(differentPixels > 0, ...) ✅ Adequate with message
Output dimensions Assert.Equal(256, resultImage.Width) ✅ Specific
Enum parsing Assert.Equal(expected, info.Quality) ✅ Exact match

Assertions are specific and meaningful throughout. The pixel-by-pixel equality for the regression test (DefaultQualityProducesIdenticalOutputToExplicitAuto) is particularly strong.


9. Fix-Test Alignment — ✅

Fix → Test mapping:

Changed File Test Coverage
ResizeQuality.cs (new enum) Used in all test files ✅
ResizeImageInfo.cs (Quality property + parsing) ResizeImageInfoTests.ResizeQualityTests
SkiaSharpTools.cs (sampling options switch) SkiaSharpRasterToolsTests.ResizeQualityTests, SkiaSharpSvgToolsTests.ResizeQualityTests
SkiaSharpRasterTools.cs / SkiaSharpSvgTools.cs / SkiaSharpImaginaryTools.cs (constructors) Covered transitively ✅
Resizer.cs (passes quality through) Covered by E2E ResizetizeImagesTests
SkiaSharpAppIconTools.cs (passes quality) ⚠️ Not directly tested
AndroidAdaptiveIconGenerator.cs (passes quality) ⚠️ Not directly tested
Microsoft.Maui.Resizetizer.After.targets (build invalidation) ⚠️ Not directly tested

Recommendations

  1. (Nice-to-have) Add a quality test to SkiaSharpAppIconToolsTests — Add a test that creates an app icon with ResizeQuality=Fastest and verifies the output differs from Auto. Since the existing SkiaSharpAppIconToolsTests already test pixel output, this would be a straightforward addition.
  2. (Nice-to-have) Add SVG Best vs Auto pixel comparison — Mirror BestQualityProducesDifferentPixelOutputThanAuto from SkiaSharpRasterToolsTests in SkiaSharpSvgToolsTests to ensure SVG quality behaves as expected for Best mode.
  3. (Low priority) Consider a ResizeQuality E2E test for app icons — A test in ResizetizeImagesTests that uses an app icon item with ResizeQuality set would close the gap for the AndroidAdaptiveIconGenerator code path.

Warning

⚠️ Firewall blocked 1 domain

The following domain was blocked by the firewall during workflow execution:

  • dc.services.visualstudio.com

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "dc.services.visualstudio.com"

See Network Configuration for more information.

Note

🔒 Integrity filtering filtered 2 items

Integrity filtering activated and filtered the following items during workflow execution.
This happens when a tool call accesses a resource that does not meet the required integrity or secrecy level of the workflow.

🧪 Test evaluation by Evaluate PR Tests

Copilot AI review requested due to automatic review settings August 3, 2026 09:52

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

Suppressed comments (3)

src/SingleProject/Resizetizer/src/AndroidAdaptiveIconGenerator.cs:127

  • When the foreground file is missing, this up-to-date check always returns false (Resizer.IsUpToDate returns false for non-empty inputs that don't exist), so manufactured foregrounds will be regenerated every build even if the inputs file/output are unchanged. Pass a null/empty input when the file doesn't exist so incremental skipping still works for the manufactured case.
				if (Resizer.IsUpToDate(new[] { foregroundFile }, destination, InputsFile, Logger, foregroundFile))

src/SingleProject/Resizetizer/src/AndroidAdaptiveIconGenerator.cs:169

  • When the monochrome file is missing, this up-to-date check always returns false (Resizer.IsUpToDate returns false for non-empty inputs that don't exist), so manufactured monochrome assets will be regenerated every build even if the inputs file/output are unchanged. Pass a null/empty input when the file doesn't exist so incremental skipping still works for the manufactured case.
				if (Resizer.IsUpToDate(new[] { monochromeFile }, destination, InputsFile, Logger, monochromeFile))

src/SingleProject/Resizetizer/src/AndroidAdaptiveIconGenerator.cs:85

  • When the background file is missing, this up-to-date check always returns false (Resizer.IsUpToDate returns false for non-empty inputs that don't exist), so manufactured backgrounds will be regenerated every build even if the inputs file/output are unchanged. Pass a null/empty input when the file doesn't exist so incremental skipping still works for the manufactured case.

This issue also appears in the following locations of the same file:

  • line 127
  • line 169
				if (Resizer.IsUpToDate(new[] { backgroundFile }, destination, InputsFile, Logger, backgroundFile))
  • Files reviewed: 25/25 changed files
  • Comments generated: 0 new

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: ec56cb07-d0e4-49cf-90fc-7c86d816e36a

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

Suppressed comments (1)

src/SingleProject/Resizetizer/src/SkiaSharpSvgTools.cs:63

  • In the rasterize-first path, DrawPicture(svg.Picture) is used for Best/Fastest. That bypasses the configured Paint (notably IsAntialias = true), which can reduce edge quality compared to the existing behavior, even when no tint is involved. Consider still providing a paint for rasterization, but strip the ColorFilter only when needed to avoid double-applying tint.
				cvn.Clear(SKColors.Transparent);
				if (Quality == ResizeQuality.Auto)
					cvn.DrawPicture(svg.Picture, Paint);
				else
					cvn.DrawPicture(svg.Picture);
  • Files reviewed: 26/26 changed files
  • Comments generated: 2

Comment thread src/Maui.InTree.targets Outdated
Comment thread src/Maui.InTree.props Outdated
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: ec56cb07-d0e4-49cf-90fc-7c86d816e36a

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

Suppressed comments (1)

src/SingleProject/Resizetizer/src/AndroidAdaptiveIconGenerator.cs:85

  • Resizer.IsUpToDate currently returns false when any declared input file does not exist. In the “manufacture” paths (e.g., backgroundExists/foregroundExists/monochromeExists == false), this means adaptive icon outputs will be regenerated on every build even when only the inputs file is unchanged, which regresses incremental build behavior and adds avoidable work. Consider passing an empty input list when the source file is missing so IsUpToDate can fall back to the inputs-file timestamp for the manufactured case (apply similarly to the foreground/monochrome checks below).
				if (Resizer.IsUpToDate(new[] { backgroundFile }, destination, InputsFile, Logger, backgroundFile))
  • Files reviewed: 29/29 changed files
  • Comments generated: 0 new

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: ec56cb07-d0e4-49cf-90fc-7c86d816e36a

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

Suppressed comments (4)

src/SingleProject/Resizetizer/src/AndroidAdaptiveIconGenerator.cs:169

  • When the monochrome file is missing (manufactured monochrome), this up-to-date check always returns false because IsUpToDate treats non-empty missing input files as out-of-date. That prevents incremental skipping and causes the monochrome part to be regenerated every build even when nothing changed.
				if (Resizer.IsUpToDate(new[] { monochromeFile }, destination, InputsFile, Logger, monochromeFile))

src/SingleProject/Resizetizer/src/AndroidAdaptiveIconGenerator.cs:127

  • When the foreground file is missing (manufactured foreground), this up-to-date check always returns false because IsUpToDate treats non-empty missing input files as out-of-date. That prevents incremental skipping and causes the foreground part to be regenerated every build even when nothing changed.
				if (Resizer.IsUpToDate(new[] { foregroundFile }, destination, InputsFile, Logger, foregroundFile))

src/TestUtils/src/Microsoft.Maui.IntegrationTests/SimpleTemplateTest.cs:9

  • This PR includes additional changes unrelated to Resizetizer ResizeQuality (e.g., skipping Avalonia template build scenarios). Please either document these in the PR description or split them into a separate PR to keep scope and rationale clear.
	const string AvaloniaBuildSkipReason = "Avalonia packages are not available on dotnet-public. See https://github.com/dotnet/maui/pull/35950";

src/SingleProject/Resizetizer/src/AndroidAdaptiveIconGenerator.cs:85

  • When the background file is missing (manufactured background), this up-to-date check always returns false because IsUpToDate treats non-empty missing input files as out-of-date. That prevents incremental skipping and causes the background part to be regenerated every build even when nothing changed.

This issue also appears in the following locations of the same file:

  • line 127
  • line 169
				if (Resizer.IsUpToDate(new[] { backgroundFile }, destination, InputsFile, Logger, backgroundFile))
  • Files reviewed: 29/29 changed files
  • Comments generated: 0 new

@kubaflo

This comment has been minimized.

@MauiBot

MauiBot commented Aug 3, 2026

Copy link
Copy Markdown
Collaborator

AI Review Summary

@jfversluis — new AI review results are available based on this last commit: 3b29bba.

Gate Inconclusive Confidence Low Platform Android


🗂️ Review Sessions — click to expand
🚦 Gate — Test Before & After Fix

Gate Result: ⚠️ INCONCLUSIVE

Platform: ANDROID · Base: net11.0 · Merge base: af127e85

🩺 Could not verify — the app under test crashed (APP_CRASH). The app SIGABRT'd / exited before the test produced a pass/fail, so the gate could not record a real result. The gate already retried on a rebooted device up to 3×; if it still reports this, the crash persisted across every attempt — a plain /review retry is unlikely to change it. This is not necessarily a problem with your PR, but it is also not a transient flake: the crash is either in the runtime/native libraries the test exercises or in the code under test. Download the adb-logcat / adb-bugreport from the drop-deep-uitests/gate artifact to see the native stack before retrying.

App crashed during test run (XHarness exit 80 APP_CRASH)

Test Without Fix (expect FAIL) With Fix (expect PASS)
🧪 DispatcherTests DispatcherTests ❌ PASS — 104s ✅ PASS — 24s
🧪 GenerateSplashAssetsTests GenerateSplashAssetsTests 🛠️ BUILD ERROR ❌ FAIL — 14s
🧪 MainThreadBridgeTests MainThreadBridgeTests ❌ PASS — 45s ✅ PASS — 15s
🧪 ResizeImageInfoTests ResizeImageInfoTests 🛠️ BUILD ERROR ✅ PASS — 4s
🧪 ResizerTests ResizerTests 🛠️ BUILD ERROR ✅ PASS — 4s
🧪 ResizetizeImagesTests ResizetizeImagesTests 🛠️ BUILD ERROR ✅ PASS — 21s
🧪 SkiaSharpAppIconToolsTests SkiaSharpAppIconToolsTests 🛠️ BUILD ERROR ⚠️ ENV ERROR
🧪 SkiaSharpRasterToolsTests SkiaSharpRasterToolsTests 🛠️ BUILD ERROR ⚠️ ENV ERROR
🧪 SkiaSharpSvgToolsTests SkiaSharpSvgToolsTests 🛠️ BUILD ERROR ⚠️ ENV ERROR
📱 ModalTests ModalTests ⚠️ ENV ERROR ⚠️ ENV ERROR
📱 TabbedPageTests TabbedPageTests ⚠️ ENV ERROR ⚠️ ENV ERROR
🔴 Without fix — 🧪 DispatcherTests: PASS ❌ · 104s

(no coded error found; showing last 1200 chars)

(in 5.8 sec).
  Restored /home/vsts/work/1/s/src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj (in 13 ms).
Test run for /home/vsts/work/1/s/artifacts/bin/Core.UnitTests/Debug/net11.0/Microsoft.Maui.UnitTests.dll (.NETCoreApp,Version=v11.0)
A total of 1 test files matched the specified pattern.
[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 11.0.0-rc.1.26379.102)
[xUnit.net 00:00:00.16]   Discovering: Microsoft.Maui.UnitTests
[xUnit.net 00:00:00.75]   Discovered:  Microsoft.Maui.UnitTests
[xUnit.net 00:00:00.76]   Starting:    Microsoft.Maui.UnitTests
  Passed CreateTimerNonRepeatingDoesNotRepeat [1 s]
  Passed TestImplementationHasDispatcher [1 ms]
  Passed CreateTimerIsNotNull [< 1 ms]
  Passed BackgroundThreadDoesNotHaveDispatcher [1 ms]
  Passed DispatchDelayedIsNotImmediate [502 ms]
  Passed BackgroundThreadDoesNotGetDispatcherFromMainThread [1 ms]
  Passed DifferentDispatcherForDifferentThread [2 ms]
  Passed SameDispatcherForSameThread [< 1 ms]
[xUnit.net 00:00:03.49]   Finished:    Microsoft.Maui.UnitTests
  Passed CreateTimerRepeatingRepeats [1 s]
Test Run Successful.
Total tests: 9
     Passed: 9
 Total time: 4.5287 Seconds
🟢 With fix — 🧪 DispatcherTests: PASS ✅ · 24s
  Determining projects to restore...
  All projects are up-to-date for restore.
Test run for /home/vsts/work/1/s/artifacts/bin/Core.UnitTests/Debug/net11.0/Microsoft.Maui.UnitTests.dll (.NETCoreApp,Version=v11.0)
A total of 1 test files matched the specified pattern.
[xUnit.net 00:00:00.01] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 11.0.0-rc.1.26379.102)
[xUnit.net 00:00:00.30]   Discovering: Microsoft.Maui.UnitTests
[xUnit.net 00:00:00.91]   Discovered:  Microsoft.Maui.UnitTests
[xUnit.net 00:00:00.94]   Starting:    Microsoft.Maui.UnitTests
  Passed CreateTimerNonRepeatingDoesNotRepeat [1 s]
  Passed TestImplementationHasDispatcher [6 ms]
  Passed CreateTimerIsNotNull [5 ms]
  Passed BackgroundThreadDoesNotHaveDispatcher [3 ms]
  Passed DispatchDelayedIsNotImmediate [508 ms]
  Passed BackgroundThreadDoesNotGetDispatcherFromMainThread [3 ms]
  Passed DifferentDispatcherForDifferentThread [11 ms]
  Passed SameDispatcherForSameThread [2 ms]
[xUnit.net 00:00:03.80]   Finished:    Microsoft.Maui.UnitTests
  Passed CreateTimerRepeatingRepeats [1 s]
Test Run Successful.
Total tests: 9
     Passed: 9
 Total time: 4.9074 Seconds
🔴 Without fix — 🧪 GenerateSplashAssetsTests: 🛠️ BUILD ERROR · 5s

Error-relevant lines (filtered from the build log):

/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(375,24): error CS0103: The name 'ResizeQuality' does not exist in the current context [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(405,17): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(405,27): error CS0103: The name 'ResizeQuality' does not exist in the current context [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(412,14): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(412,24): error CS0103: The name 'ResizeQuality' does not exist in the current context [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(435,14): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(435,24): error CS0103: The name 'ResizeQuality' does not exist in the current context [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(442,14): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(442,24): error CS0103: The name 'ResizeQuality' does not exist in the current context [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(462,30): error CS0246: The type or namespace name 'ResizeQuality' could not be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(466,10): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
🟢 With fix — 🧪 GenerateSplashAssetsTests: FAIL ❌ · 14s

Error-relevant lines (filtered from the build log):

     at SkiaSharp.SkiaApi.sk_compatpaint_new()
   at SkiaSharp.SKPaint..ctor()
   at Microsoft.Maui.Resizetizer.SkiaSharpTools..ctor(String filename, Nullable`1 baseSize, Nullable`1 backgroundColor, Nullable`1 tintColor, ResizeQuality quality, ILogger logger) in /_/src/SingleProject/Resizetizer/src/SkiaSharpTools.cs:line 83
   at Microsoft.Maui.Resizetizer.SkiaSharpSvgTools..ctor(String filename, Nullable`1 baseSize, Nullable`1 backgroundColor, Nullable`1 tintColor, ResizeQuality quality, ILogger logger) in /_/src/SingleProject/Resizetizer/src/SkiaSharpSvgTools.cs:line 18
   at Microsoft.Maui.Resizetizer.SkiaSharpTools.Create(Boolean isVector, String filename, Nullable`1 baseSize, Nullable`1 backgroundColor, Nullable`1 tintColor, ResizeQuality quality, ILogger logger) in /_/src/SingleProject/Resizetizer/src/SkiaSharpTools.cs:line 65
   at Microsoft.Maui.Resizetizer.SkiaSharpAppIconTools..ctor(ResizeImageInfo info, ILogger logger) in /_/src/SingleProject/Resizetizer/src/SkiaSharpAppIconTools.cs:line 24
   at Microsoft.Maui.Resizetizer.GenerateSplashAssets.Execute() in /_/src/SingleProject/Resizetizer/src/GenerateSplashAssets.cs:line 27
   at Microsoft.Maui.Resizetizer.Tests.GenerateSplashAssetsTests.SplashScreenResectsAlias(String alias, String outputImage) in /_/src/SingleProject/Resizetizer/test/UnitTests/GenerateSplashAssetsTests.cs:line 107
   at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
   at System.Reflection.MethodBaseInvoker.InvokeDirectByRefWithFewArgs(Object obj, Span`1 copyOfArgs, BindingFlags invokeAttr)
   at InvokeStub_GenerateSplashAssetsTests.SplashScreenResectsAlias(Object, Span`1)
   at System.Reflection.MethodBaseInvoker.InvokeWithFewArgs(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at Microsoft.Maui.Resizetizer.Tests.GenerateSplashAssetsTests.FileIsGenerated(String image, String color) in /_/src/SingleProject/Resizetizer/test/UnitTests/GenerateSplashAssetsTests.cs:line 50
   at InvokeStub_GenerateSplashAssetsTests.FileIsGenerated(Object, Span`1)
   at Microsoft.Maui.Resizetizer.SkiaSharpRasterTools..ctor(String filename, Nullable`1 baseSize, Nullable`1 backgroundColor, Nullable`1 tintColor, ResizeQuality quality, ILogger logger) in /_/src/SingleProject/Resizetizer/src/SkiaSharpRasterTools.cs:line 17
   at Microsoft.Maui.Resizetizer.Tests.GenerateSplashAssetsTests.ResizeQualityMetadataIsRespected() in /_/src/SingleProject/Resizetizer/test/UnitTests/GenerateSplashAssetsTests.cs:line 68
   at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
🔴 Without fix — 🧪 MainThreadBridgeTests: PASS ❌ · 45s

(no coded error found; showing last 1200 chars)

t.net 00:00:00.00] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 11.0.0-rc.1.26379.102)
[xUnit.net 00:00:00.26]   Discovering: Microsoft.Maui.UnitTests
[xUnit.net 00:00:00.78]   Discovered:  Microsoft.Maui.UnitTests
[xUnit.net 00:00:00.79]   Starting:    Microsoft.Maui.UnitTests
  Passed MauiAppBuild_BridgesDispatcherToMainThread [129 ms]
  Passed SetCustomImpl_NullBeginInvoke_Throws [1 ms]
  Passed WithCustomImpl_IsMainThread_ReturnsFalse [4 ms]
  Passed WithCustomImpl_IsMainThread_UsesBackingImpl [< 1 ms]
  Passed MauiAppBuild_BridgeUsesApplicationDispatcher [1 ms]
  Passed WithoutCustomImpl_BeginInvoke_Throws [5 ms]
  Passed MauiAppBuild_BeginInvoke_DispatchesToDispatcher [1 ms]
  Passed SetCustomImpl_NullIsMainThread_Throws [2 ms]
  Passed InvokeOnMainThreadAsync_Action_WorksThroughBridge [4 ms]
[xUnit.net 00:00:01.11]   Finished:    Microsoft.Maui.UnitTests
  Passed ClearCustomImpl_RestoresThrowBehavior [3 ms]
  Passed WithCustomImpl_BeginInvoke_CallsBackingImpl [< 1 ms]
  Passed WithoutCustomImpl_IsMainThread_Throws [< 1 ms]
  Passed BeginInvoke_WhenOnMainThread_InvokesDirectly [< 1 ms]
Test Run Successful.
Total tests: 13
     Passed: 13
 Total time: 2.2647 Seconds
🟢 With fix — 🧪 MainThreadBridgeTests: PASS ✅ · 15s

(no coded error found; showing last 1200 chars)

00:00:00.01] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 11.0.0-rc.1.26379.102)
[xUnit.net 00:00:00.27]   Discovering: Microsoft.Maui.UnitTests
[xUnit.net 00:00:00.87]   Discovered:  Microsoft.Maui.UnitTests
[xUnit.net 00:00:00.88]   Starting:    Microsoft.Maui.UnitTests
  Passed MauiAppBuild_BridgesDispatcherToMainThread [116 ms]
  Passed SetCustomImpl_NullBeginInvoke_Throws [3 ms]
  Passed WithCustomImpl_IsMainThread_ReturnsFalse [< 1 ms]
  Passed WithCustomImpl_IsMainThread_UsesBackingImpl [< 1 ms]
  Passed MauiAppBuild_BridgeUsesApplicationDispatcher [5 ms]
  Passed WithoutCustomImpl_BeginInvoke_Throws [< 1 ms]
  Passed MauiAppBuild_BeginInvoke_DispatchesToDispatcher [1 ms]
  Passed SetCustomImpl_NullIsMainThread_Throws [< 1 ms]
  Passed InvokeOnMainThreadAsync_Action_WorksThroughBridge [7 ms]
[xUnit.net 00:00:01.20]   Finished:    Microsoft.Maui.UnitTests
  Passed ClearCustomImpl_RestoresThrowBehavior [< 1 ms]
  Passed WithCustomImpl_BeginInvoke_CallsBackingImpl [2 ms]
  Passed WithoutCustomImpl_IsMainThread_Throws [< 1 ms]
  Passed BeginInvoke_WhenOnMainThread_InvokesDirectly [< 1 ms]
Test Run Successful.
Total tests: 13
     Passed: 13
 Total time: 2.2209 Seconds
🔴 Without fix — 🧪 ResizeImageInfoTests: 🛠️ BUILD ERROR · 4s

Error-relevant lines (filtered from the build log):

/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/ResizeImageInfoTests.cs(117,18): error CS0103: The name 'ResizeQuality' does not exist in the current context [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/ResizeImageInfoTests.cs(117,43): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/ResizeImageInfoTests.cs(130,18): error CS0103: The name 'ResizeQuality' does not exist in the current context [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/ResizeImageInfoTests.cs(130,43): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/ResizeImageInfoTests.cs(143,18): error CS0103: The name 'ResizeQuality' does not exist in the current context [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/ResizeImageInfoTests.cs(143,43): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/ResizeImageInfoTests.cs(152,31): error CS0246: The type or namespace name 'ResizeQuality' could not be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/ResizeImageInfoTests.cs(160,33): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/ResizerTests.cs(36,25): error CS0117: 'Resizer' does not contain a definition for 'IsUpToDate' [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/ResizerTests.cs(53,25): error CS0117: 'Resizer' does not contain a definition for 'IsUpToDate' [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/ResizerTests.cs(69,24): error CS0117: 'Resizer' does not contain a definition for 'IsUpToDate' [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
🟢 With fix — 🧪 ResizeImageInfoTests: PASS ✅ · 4s

(no coded error found; showing last 1200 chars)

o") [< 1 ms]
  Passed Microsoft.Maui.Resizetizer.Tests.ResizeImageInfoTests+ResizeQualityTests.QualityParsedFromTaskItem(metadataValue: "Best") [< 1 ms]
  Passed Microsoft.Maui.Resizetizer.Tests.ResizeImageInfoTests+ResizeQualityTests.QualityCanBeSet(qualityName: "Auto") [< 1 ms]
  Passed Microsoft.Maui.Resizetizer.Tests.ResizeImageInfoTests+ResizeQualityTests.QualityCanBeSet(qualityName: "Fastest") [< 1 ms]
  Passed Microsoft.Maui.Resizetizer.Tests.ResizeImageInfoTests+ResizeQualityTests.QualityCanBeSet(qualityName: "Best") [< 1 ms]
[xUnit.net 00:00:00.38]   Finished:    Microsoft.Maui.Resizetizer.UnitTests
  Passed Microsoft.Maui.Resizetizer.Tests.ResizeImageInfoTests+ResizeQualityTests.QualityDefaultsToAutoForUndefinedNumericValue [< 1 ms]
  Passed Microsoft.Maui.Resizetizer.Tests.ResizeImageInfoTests+ResizeQualityTests.QualityDefaultsToAutoWhenNotSpecified [< 1 ms]
  Passed Microsoft.Maui.Resizetizer.Tests.ResizeImageInfoTests+ResizeQualityTests.QualityDefaultsToAutoForInvalidValue [1 ms]
  Passed Microsoft.Maui.Resizetizer.Tests.ResizeImageInfoTests+ResizeQualityTests.DefaultQualityIsAuto [< 1 ms]
Test Run Successful.
Total tests: 30
     Passed: 30
 Total time: 0.7921 Seconds
🔴 Without fix — 🧪 ResizerTests: 🛠️ BUILD ERROR · 3s

Error-relevant lines (filtered from the build log):

/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs(518,25): error CS0103: The name 'ResizeQuality' does not exist in the current context [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs(556,15): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs(556,25): error CS0103: The name 'ResizeQuality' does not exist in the current context [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs(563,15): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs(563,25): error CS0103: The name 'ResizeQuality' does not exist in the current context [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs(598,11): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs(598,21): error CS0103: The name 'ResizeQuality' does not exist in the current context [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs(631,11): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs(631,21): error CS0103: The name 'ResizeQuality' does not exist in the current context [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs(654,30): error CS0246: The type or namespace name 'ResizeQuality' could not be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs(658,10): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
🟢 With fix — 🧪 ResizerTests: PASS ✅ · 4s
  Determining projects to restore...
  All projects are up-to-date for restore.
Test run for /home/vsts/work/1/s/artifacts/bin/Resizetizer.UnitTests/Debug/net11.0/Microsoft.Maui.Resizetizer.UnitTests.dll (.NETCoreApp,Version=v11.0)
A total of 1 test files matched the specified pattern.
[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 11.0.0-rc.1.26379.102)
[xUnit.net 00:00:00.08]   Discovering: Microsoft.Maui.Resizetizer.UnitTests
[xUnit.net 00:00:00.24]   Discovered:  Microsoft.Maui.Resizetizer.UnitTests
[xUnit.net 00:00:00.25]   Starting:    Microsoft.Maui.Resizetizer.UnitTests
[xUnit.net 00:00:00.34]   Finished:    Microsoft.Maui.Resizetizer.UnitTests
  Passed Microsoft.Maui.Resizetizer.Tests.ResizerTests.MultiInputCanBeUpToDateWhenSourceInputsAreEmpty [11 ms]
  Passed Microsoft.Maui.Resizetizer.Tests.ResizerTests.MultiInputIsNotUpToDateWhenInputsFileIsMissing [6 ms]
  Passed Microsoft.Maui.Resizetizer.Tests.ResizerTests.MultiInputIsNotUpToDateWhenDeclaredSourceInputIsMissing [1 ms]
Test Run Successful.
Total tests: 3
     Passed: 3
 Total time: 0.7902 Seconds
🔴 Without fix — 🧪 ResizetizeImagesTests: 🛠️ BUILD ERROR · 3s

Error-relevant lines (filtered from the build log):

/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/ResizeImageInfoTests.cs(99,31): error CS0246: The type or namespace name 'ResizeQuality' could not be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/ResizeImageInfoTests.cs(107,33): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/ResizeImageInfoTests.cs(117,18): error CS0103: The name 'ResizeQuality' does not exist in the current context [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/ResizeImageInfoTests.cs(117,43): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/ResizeImageInfoTests.cs(130,18): error CS0103: The name 'ResizeQuality' does not exist in the current context [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/ResizeImageInfoTests.cs(130,43): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/ResizeImageInfoTests.cs(143,18): error CS0103: The name 'ResizeQuality' does not exist in the current context [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/ResizeImageInfoTests.cs(143,43): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/ResizeImageInfoTests.cs(152,31): error CS0246: The type or namespace name 'ResizeQuality' could not be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/ResizeImageInfoTests.cs(160,33): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
🟢 With fix — 🧪 ResizetizeImagesTests: PASS ✅ · 21s

Error-relevant lines (filtered from the build log):

   at Microsoft.Maui.Resizetizer.Resizer.get_Tools() in /_/src/SingleProject/Resizetizer/src/Resizer.cs:line 29
   at Microsoft.Maui.Resizetizer.Resizer.Rasterize(DpiPath dpi, String destination) in /_/src/SingleProject/Resizetizer/src/Resizer.cs:line 136
   at Microsoft.Maui.Resizetizer.Resizer.Resize(DpiPath dpi, String inputsFile) in /_/src/SingleProject/Resizetizer/src/Resizer.cs:line 127
   at Microsoft.Maui.Resizetizer.ResizetizeImages.ProcessImageResize(ResizeImageInfo img, DpiPath[] dpis, ConcurrentBag`1 resizedImages) in /_/src/SingleProject/Resizetizer/src/ResizetizeImages.cs:line 245
   at Microsoft.Maui.Resizetizer.ResizetizeImages.<>c__DisplayClass34_0.<ExecuteAsync>b__0(ResizeImageInfo img) in /_/src/SingleProject/Resizetizer/src/ResizetizeImages.cs:line 73
     at Microsoft.Maui.Resizetizer.Tests.ResizetizeImagesTests.ExecuteForPlatformApp.BasicImageProcessingWorks(String image) in /_/src/SingleProject/Resizetizer/test/UnitTests/ResizetizeImagesTests.cs:line 79
   at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
   at System.Reflection.MethodBaseInvoker.InvokeDirectByRefWithFewArgs(Object obj, Span`1 copyOfArgs, BindingFlags invokeAttr)
   at Microsoft.Maui.Resizetizer.SkiaSharpImaginaryTools..ctor(Nullable`1 backgroundColor, ILogger logger) in /_/src/SingleProject/Resizetizer/src/SkiaSharpImaginaryTools.cs:line 14
   at Microsoft.Maui.Resizetizer.SkiaSharpTools.CreateImaginary(Nullable`1 backgroundColor, ILogger logger) in /_/src/SingleProject/Resizetizer/src/SkiaSharpTools.cs:line 70
   at Microsoft.Maui.Resizetizer.AndroidAdaptiveIconGenerator.ProcessBackground(List`1 results, DirectoryInfo fullIntermediateOutputPath) in /_/src/SingleProject/Resizetizer/src/AndroidAdaptiveIconGenerator.cs:line 102
   at Microsoft.Maui.Resizetizer.AndroidAdaptiveIconGenerator.Generate() in /_/src/SingleProject/Resizetizer/src/AndroidAdaptiveIconGenerator.cs:line 56
   at Microsoft.Maui.Resizetizer.ResizetizeImages.ProcessAppIcon(ResizeImageInfo img, ConcurrentBag`1 resizedImages) in /_/src/SingleProject/Resizetizer/src/ResizetizeImages.cs:line 182
   at Microsoft.Maui.Resizetizer.ResizetizeImages.<>c__DisplayClass34_0.<ExecuteAsync>b__0(ResizeImageInfo img) in /_/src/SingleProject/Resizetizer/src/ResizetizeImages.cs:line 64
     at Microsoft.Maui.Resizetizer.Tests.ResizetizeImagesTests.ExecuteForAndroid.SingleRasterAppIconWithOnlyPathSucceedsWithoutVectors(String name, String alias, String outputName) in /_/src/SingleProject/Resizetizer/test/UnitTests/ResizetizeImagesTests.cs:line 745
   at InvokeStub_ExecuteForAndroid.SingleRasterAppIconWithOnlyPathSucceedsWithoutVectors(Object, Span`1)
   at System.Reflection.MethodBaseInvoker.InvokeWithFewArgs(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at InvokeStub_ExecuteForPlatformApp.BasicImageProcessingWorks(Object, Span`1)
   at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
Unhandled exception. System.TypeInitializationException: The type initializer for 'SkiaSharp.SKObject' threw an exception.
   at SkiaSharp.SkiaApi.sk_version_get_milestone()
   at SkiaSharp.SkiaSharpVersion.get_Native()
   at SkiaSharp.SkiaSharpVersion.CheckNativeLibraryCompatible(Boolean throwIfIncompatible)
   at SkiaSharp.SKObject..cctor()
   at System.Runtime.CompilerServices.InitHelpers.CallClassConstructor(Void* cctor, Void* instantiatingArg, Exception* pException)
   at SkiaSharp.SKObject.DeregisterHandle(IntPtr handle, SKObject instance)
   at SkiaSharp.SKObject.set_Handle(IntPtr value)
   at SkiaSharp.SKNativeObject.Dispose(Boolean disposing)
   at SkiaSharp.SKObject.Dispose(Boolean disposing)
   at SkiaSharp.SKPaint.Dispose(Boolean disposing)
   at SkiaSharp.SKNativeObject.Finalize()
   at System.GC.RunFinalizers()
🔴 Without fix — 🧪 SkiaSharpAppIconToolsTests: 🛠️ BUILD ERROR · 3s

Error-relevant lines (filtered from the build log):

/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(412,14): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(412,24): error CS0103: The name 'ResizeQuality' does not exist in the current context [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(435,14): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(435,24): error CS0103: The name 'ResizeQuality' does not exist in the current context [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(442,14): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(442,24): error CS0103: The name 'ResizeQuality' does not exist in the current context [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(462,30): error CS0246: The type or namespace name 'ResizeQuality' could not be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(466,10): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/ResizerTests.cs(36,25): error CS0117: 'Resizer' does not contain a definition for 'IsUpToDate' [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/ResizerTests.cs(53,25): error CS0117: 'Resizer' does not contain a definition for 'IsUpToDate' [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/ResizerTests.cs(69,24): error CS0117: 'Resizer' does not contain a definition for 'IsUpToDate' [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
🟢 With fix — 🧪 SkiaSharpAppIconToolsTests: ⚠️ ENV ERROR · 76s

Error-relevant lines (filtered from the build log):

     at SkiaSharp.SkiaApi.sk_compatpaint_new()
   at SkiaSharp.SKPaint..ctor()
   at Microsoft.Maui.Resizetizer.SkiaSharpTools..ctor(String filename, Nullable`1 baseSize, Nullable`1 backgroundColor, Nullable`1 tintColor, ResizeQuality quality, ILogger logger) in /_/src/SingleProject/Resizetizer/src/SkiaSharpTools.cs:line 83
   at Microsoft.Maui.Resizetizer.SkiaSharpSvgTools..ctor(String filename, Nullable`1 baseSize, Nullable`1 backgroundColor, Nullable`1 tintColor, ResizeQuality quality, ILogger logger) in /_/src/SingleProject/Resizetizer/src/SkiaSharpSvgTools.cs:line 18
   at Microsoft.Maui.Resizetizer.SkiaSharpTools.Create(Boolean isVector, String filename, Nullable`1 baseSize, Nullable`1 backgroundColor, Nullable`1 tintColor, ResizeQuality quality, ILogger logger) in /_/src/SingleProject/Resizetizer/src/SkiaSharpTools.cs:line 65
   at Microsoft.Maui.Resizetizer.SkiaSharpAppIconTools..ctor(ResizeImageInfo info, ILogger logger) in /_/src/SingleProject/Resizetizer/src/SkiaSharpAppIconTools.cs:line 24
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpAppIconToolsTests.Resize.BasicTest(Double dpi, Double fgScale, String bg, String fg, Int32 exWidth, Int32 exHeight) in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpAppIconToolsTests.cs:line 61
   at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
   at System.Reflection.MethodBaseInvoker.InvokeWithManyArgs(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at InvokeStub_Resize.BasicTest(Object, Span`1)
   at Microsoft.Maui.Resizetizer.SkiaSharpRasterTools..ctor(String filename, Nullable`1 baseSize, Nullable`1 backgroundColor, Nullable`1 tintColor, ResizeQuality quality, ILogger logger) in /_/src/SingleProject/Resizetizer/src/SkiaSharpRasterTools.cs:line 17
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpAppIconToolsTests.Resize.DiffPropoprtionWithBaseSize(Double dpi, Double fgScale, String bg, String fg, Int32 exWidth, Int32 exHeight) in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpAppIconToolsTests.cs:line 147
Unhandled exception. System.TypeInitializationException: The type initializer for 'SkiaSharp.SKObject' threw an exception.
   at SkiaSharp.SkiaApi.sk_version_get_milestone()
   at SkiaSharp.SkiaSharpVersion.get_Native()
   at SkiaSharp.SkiaSharpVersion.CheckNativeLibraryCompatible(Boolean throwIfIncompatible)
   at SkiaSharp.SKObject..cctor()
   at System.Runtime.CompilerServices.InitHelpers.CallClassConstructor(Void* cctor, Void* instantiatingArg, Exception* pException)
   at SkiaSharp.SKObject.DeregisterHandle(IntPtr handle, SKObject instance)
   at SkiaSharp.SKObject.set_Handle(IntPtr value)
   at SkiaSharp.SKNativeObject.Dispose(Boolean disposing)
   at SkiaSharp.SKObject.Dispose(Boolean disposing)
   at SkiaSharp.SKPaint.Dispose(Boolean disposing)
   at SkiaSharp.SKNativeObject.Finalize()
   at System.GC.RunFinalizers()
   at InvokeStub_Resize.DiffPropoprtionWithBaseSize(Object, Span`1)
🔴 Without fix — 🧪 SkiaSharpRasterToolsTests: 🛠️ BUILD ERROR · 3s

Error-relevant lines (filtered from the build log):

/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(375,24): error CS0103: The name 'ResizeQuality' does not exist in the current context [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(405,17): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(405,27): error CS0103: The name 'ResizeQuality' does not exist in the current context [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(412,14): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(412,24): error CS0103: The name 'ResizeQuality' does not exist in the current context [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(435,14): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(435,24): error CS0103: The name 'ResizeQuality' does not exist in the current context [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(442,14): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(442,24): error CS0103: The name 'ResizeQuality' does not exist in the current context [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(462,30): error CS0246: The type or namespace name 'ResizeQuality' could not be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(466,10): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
🟢 With fix — 🧪 SkiaSharpRasterToolsTests: ⚠️ ENV ERROR · 73s

Error-relevant lines (filtered from the build log):

   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpRasterToolsTests.ResizeQualityTests.DefaultQualityProducesIdenticalOutputToExplicitAuto() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs:line 367
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpRasterToolsTests.Resize.WithBaseSizeResizes() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs:line 113
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpRasterToolsTests.ResizeQualityTests.AllQualitiesProduceCorrectlySizedOutput(String qualityName) in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs:line 467
   at System.Reflection.MethodBaseInvoker.InvokeDirectByRefWithFewArgs(Object obj, Span`1 copyOfArgs, BindingFlags invokeAttr)
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpRasterToolsTests.Resize.ColorizedWithAlphaWithColorsReplacesColors() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs:line 239
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpRasterToolsTests.Resize.BasicWithColorsKeepsColors() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs:line 91
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpRasterToolsTests.Resize.WithBaseSizeAndScaleResizes() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs:line 135
   at InvokeStub_ResizeQualityTests.AllQualitiesProduceCorrectlySizedOutput(Object, Span`1)
   at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpRasterToolsTests.Resize.BasicWithDownScaleReturnsDownScaledSize() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs:line 72
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpRasterToolsTests.Resize.ColorizedWithNamedReturnsColored() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs:line 197
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpRasterToolsTests.ResizeQualityTests.BestQualityMapsToMitchellCubicSampling() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs:line 306
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpRasterToolsTests.Resize.BasicNoScaleReturnsOriginalSize() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs:line 53
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpRasterToolsTests.Resize.ColorizedReturnsColored() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs:line 157
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpRasterToolsTests.ResizeQualityTests.BestQualityProducesDifferentPixelOutputThanAuto() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs:line 436
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpRasterToolsTests.ResizeQualityTests.AutoQualityMapsToLinearMipmapSampling() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs:line 293
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpRasterToolsTests.ResizeQualityTests.FastestQualityMapsToNearestNeighborSampling() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs:line 319
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpRasterToolsTests.Resize.BasicNoScaleNoResizeReturnsOriginalSize() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs:line 34
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpRasterToolsTests.ResizeQualityTests.ResizeWithFastestQualityProducesValidImage() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs:line 333
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpRasterToolsTests.ResizeQualityTests.ResizeWithBestQualityProducesValidImage() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs:line 350
🔴 Without fix — 🧪 SkiaSharpSvgToolsTests: 🛠️ BUILD ERROR · 3s

Error-relevant lines (filtered from the build log):

/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(375,24): error CS0103: The name 'ResizeQuality' does not exist in the current context [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(405,17): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(405,27): error CS0103: The name 'ResizeQuality' does not exist in the current context [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(412,14): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(412,24): error CS0103: The name 'ResizeQuality' does not exist in the current context [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(435,14): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(435,24): error CS0103: The name 'ResizeQuality' does not exist in the current context [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(442,14): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(442,24): error CS0103: The name 'ResizeQuality' does not exist in the current context [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(462,30): error CS0246: The type or namespace name 'ResizeQuality' could not be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpRasterToolsTests.cs(466,10): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extension method 'Quality' accepting a first argument of type 'ResizeImageInfo' could be found (are you missing a using directive or an assembly reference?) [/home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/Resizetizer.UnitTests.csproj]
🟢 With fix — 🧪 SkiaSharpSvgToolsTests: ⚠️ ENV ERROR · 72s

Error-relevant lines (filtered from the build log):

   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpSvgToolsTests.Resize.BasicWithColorsKeepsColors() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs:line 91
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpSvgToolsTests.ResizeQualityTests.FastestQualityHandlesFractionalSvgSizeWhenUpscaling() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs:line 632
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpSvgToolsTests.Resize.ColorizedWithColorsReplacesColors() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs:line 217
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpSvgToolsTests.Resize.BasicWithDownScaleReturnsDownScaledSize() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs:line 72
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpSvgToolsTests.ResizeQualityTests.ResizeWithBestQualityProducesValidImage() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs:line 418
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpSvgToolsTests.Resize.ColorizedWithAlphaReturnsColored() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs:line 177
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpSvgToolsTests.ResizeQualityTests.ResizeWithFastestQualityProducesValidImage() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs:line 401
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpSvgToolsTests.Resize.SvgImageWithDecodingIssue_12109() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs:line 313
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpSvgToolsTests.ResizeQualityTests.FastestQualityMapsToNearestNeighborSampling() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs:line 387
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpSvgToolsTests.ResizeQualityTests.DefaultQualityMapsToLinearMipmapSampling() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs:line 361
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpSvgToolsTests.ResizeQualityTests.DefaultQualityProducesIdenticalOutputToExplicitAuto() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs:line 436
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpSvgToolsTests.Resize.ColorsInCssCanBeUsed() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs:line 260
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpSvgToolsTests.ResizeQualityTests.FastestQualityAppliesSvgTintOnceWhenUpscaling() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs:line 599
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpSvgToolsTests.Resize.ColorizedWithAlphaWithColorsReplacesColors() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs:line 239
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpSvgToolsTests.ResizeQualityTests.DifferentQualitiesProduceDifferentPixelOutput() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs:line 471
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpSvgToolsTests.ResizeQualityTests.FastestQualityAffectsSvgUpscaling() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs:line 512
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpSvgToolsTests.Resize.ColorizedWithNamedReturnsColored() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs:line 197
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpSvgToolsTests.Resize.BasicNoScaleReturnsOriginalSize() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs:line 33
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpSvgToolsTests.Resize.SvgImageWithDecodingIssue_15442() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs:line 279
   at Microsoft.Maui.Resizetizer.Tests.SkiaSharpSvgToolsTests.Resize.WithBaseSizeAndScaleResizes() in /_/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs:line 135
🔴 Without fix — 📱 ModalTests: ⚠️ ENV ERROR · 1692s

(no coded error found; showing last 1200 chars)

tive code. This usually indicates
      08-03 09:02:18.910  8758  8758 E DOTNET  : a fatal error in the runtime or one of the native libraries
      08-03 09:02:18.910  8758  8758 E DOTNET  : used by your application.
info: Wrote ADB bugreport to /home/vsts/work/1/s/artifacts/log/adb-bugreport-com.microsoft.maui.controls.devicetests.zip
info: <<XHARNESS_RESULT_START>>
      {
        "version": 1,
        "machineName": "runnervmtroe5",
        "exitCode": 80,
        "exitCodeName": "APP_CRASH",
        "platform": "android",
        "device": "emulator-5554",
        "deviceOsVersion": "API 30",
        "architecture": "x86_64",
        "files": [
          {
            "name": "adb-logcat-com.microsoft.maui.controls.devicetests-default.log",
            "type": "logcat"
          },
          {
            "name": "adb-bugreport-com.microsoft.maui.controls.devicetests.zip",
            "type": "bugreport"
          }
        ]
      }
      <<XHARNESS_RESULT_END>>
info: Attempting to remove apk 'com.microsoft.maui.controls.devicetests'..
info: Successfully uninstalled com.microsoft.maui.controls.devicetests
XHarness exit code: 80 (APP_CRASH)
  Tests completed with exit code: 80
🟢 With fix — 📱 ModalTests: ⚠️ ENV ERROR · 679s

(no coded error found; showing last 1200 chars)

tive code. This usually indicates
      08-03 16:41:57.497  6946  6946 E DOTNET  : a fatal error in the runtime or one of the native libraries
      08-03 16:41:57.497  6946  6946 E DOTNET  : used by your application.
info: Wrote ADB bugreport to /home/vsts/work/1/s/artifacts/log/adb-bugreport-com.microsoft.maui.controls.devicetests.zip
info: <<XHARNESS_RESULT_START>>
      {
        "version": 1,
        "machineName": "runnervmtroe5",
        "exitCode": 80,
        "exitCodeName": "APP_CRASH",
        "platform": "android",
        "device": "emulator-5554",
        "deviceOsVersion": "API 30",
        "architecture": "x86_64",
        "files": [
          {
            "name": "adb-logcat-com.microsoft.maui.controls.devicetests-default.log",
            "type": "logcat"
          },
          {
            "name": "adb-bugreport-com.microsoft.maui.controls.devicetests.zip",
            "type": "bugreport"
          }
        ]
      }
      <<XHARNESS_RESULT_END>>
info: Attempting to remove apk 'com.microsoft.maui.controls.devicetests'..
info: Successfully uninstalled com.microsoft.maui.controls.devicetests
XHarness exit code: 80 (APP_CRASH)
  Tests completed with exit code: 80
🔴 Without fix — 📱 TabbedPageTests: ⚠️ ENV ERROR · 618s

(no coded error found; showing last 1200 chars)

tive code. This usually indicates
      08-03 16:24:45.506  7486  7486 E DOTNET  : a fatal error in the runtime or one of the native libraries
      08-03 16:24:45.506  7486  7486 E DOTNET  : used by your application.
info: Wrote ADB bugreport to /home/vsts/work/1/s/artifacts/log/adb-bugreport-com.microsoft.maui.controls.devicetests.zip
info: <<XHARNESS_RESULT_START>>
      {
        "version": 1,
        "machineName": "runnervmtroe5",
        "exitCode": 80,
        "exitCodeName": "APP_CRASH",
        "platform": "android",
        "device": "emulator-5554",
        "deviceOsVersion": "API 30",
        "architecture": "x86_64",
        "files": [
          {
            "name": "adb-logcat-com.microsoft.maui.controls.devicetests-default.log",
            "type": "logcat"
          },
          {
            "name": "adb-bugreport-com.microsoft.maui.controls.devicetests.zip",
            "type": "bugreport"
          }
        ]
      }
      <<XHARNESS_RESULT_END>>
info: Attempting to remove apk 'com.microsoft.maui.controls.devicetests'..
info: Successfully uninstalled com.microsoft.maui.controls.devicetests
XHarness exit code: 80 (APP_CRASH)
  Tests completed with exit code: 80
🟢 With fix — 📱 TabbedPageTests: ⚠️ ENV ERROR · 622s

(no coded error found; showing last 1200 chars)

tive code. This usually indicates
      08-03 16:51:23.102  6543  6543 E DOTNET  : a fatal error in the runtime or one of the native libraries
      08-03 16:51:23.102  6543  6543 E DOTNET  : used by your application.
info: Wrote ADB bugreport to /home/vsts/work/1/s/artifacts/log/adb-bugreport-com.microsoft.maui.controls.devicetests.zip
info: <<XHARNESS_RESULT_START>>
      {
        "version": 1,
        "machineName": "runnervmtroe5",
        "exitCode": 80,
        "exitCodeName": "APP_CRASH",
        "platform": "android",
        "device": "emulator-5554",
        "deviceOsVersion": "API 30",
        "architecture": "x86_64",
        "files": [
          {
            "name": "adb-logcat-com.microsoft.maui.controls.devicetests-default.log",
            "type": "logcat"
          },
          {
            "name": "adb-bugreport-com.microsoft.maui.controls.devicetests.zip",
            "type": "bugreport"
          }
        ]
      }
      <<XHARNESS_RESULT_END>>
info: Attempting to remove apk 'com.microsoft.maui.controls.devicetests'..
info: Successfully uninstalled com.microsoft.maui.controls.devicetests
XHarness exit code: 80 (APP_CRASH)
  Tests completed with exit code: 80
⚠️ Failure Details (17 tests)
  • DispatcherTests PASSED without fix (should fail) — tests don't catch the bug
  • 🛠️ GenerateSplashAssetsTests without fix: build failed before tests could run
    • /home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs(373,10): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extens...
  • MainThreadBridgeTests PASSED without fix (should fail) — tests don't catch the bug
  • 🛠️ ResizeImageInfoTests without fix: build failed before tests could run
    • /home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs(373,10): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extens...
  • 🛠️ ResizerTests without fix: build failed before tests could run
    • /home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/ResizeImageInfoTests.cs(69,18): error CS0103: The name 'ResizeQuality' does not exist in the current context [/home/vsts/work/1/s/src/S...
  • 🛠️ ResizetizeImagesTests without fix: build failed before tests could run
    • /home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs(373,10): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extens...
  • 🛠️ SkiaSharpAppIconToolsTests without fix: build failed before tests could run
    • /home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs(373,10): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extens...
  • 🛠️ SkiaSharpRasterToolsTests without fix: build failed before tests could run
    • /home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs(373,10): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extens...
  • 🛠️ SkiaSharpSvgToolsTests without fix: build failed before tests could run
    • /home/vsts/work/1/s/src/SingleProject/Resizetizer/test/UnitTests/SkiaSharpSvgToolsTests.cs(373,10): error CS1061: 'ResizeImageInfo' does not contain a definition for 'Quality' and no accessible extens...
  • ⚠️ ModalTests without fix: App crashed during test run (XHarness exit 80 APP_CRASH)
  • ⚠️ TabbedPageTests without fix: App crashed during test run (XHarness exit 80 APP_CRASH)
  • GenerateSplashAssetsTests FAILED with fix (should pass)
    • Device tests: 5 of 6 failed
  • ⚠️ SkiaSharpAppIconToolsTests with fix: Native library 'libSkiaSharp' could not be loaded on the gate agent (DllNotFoundException) — the test could not run, so the fix is unverifiable here
  • ⚠️ SkiaSharpRasterToolsTests with fix: Native library 'libSkiaSharp' could not be loaded on the gate agent (DllNotFoundException) — the test could not run, so the fix is unverifiable here
  • ⚠️ SkiaSharpSvgToolsTests with fix: Native library 'libSkiaSharp' could not be loaded on the gate agent (DllNotFoundException) — the test could not run, so the fix is unverifiable here
  • ⚠️ ModalTests with fix: App crashed during test run (XHarness exit 80 APP_CRASH)
  • ⚠️ TabbedPageTests with fix: App crashed during test run (XHarness exit 80 APP_CRASH)
📁 Fix files reverted (13 files)
  • src/Maui.InTree.props
  • src/Maui.InTree.targets
  • src/SingleProject/Resizetizer/src/AndroidAdaptiveIconGenerator.cs
  • src/SingleProject/Resizetizer/src/ResizeImageInfo.cs
  • src/SingleProject/Resizetizer/src/Resizer.cs
  • src/SingleProject/Resizetizer/src/ResizetizeImages.cs
  • src/SingleProject/Resizetizer/src/SkiaSharpAppIconTools.cs
  • src/SingleProject/Resizetizer/src/SkiaSharpImaginaryTools.cs
  • src/SingleProject/Resizetizer/src/SkiaSharpRasterTools.cs
  • src/SingleProject/Resizetizer/src/SkiaSharpSvgTools.cs
  • src/SingleProject/Resizetizer/src/SkiaSharpTools.cs
  • src/SingleProject/Resizetizer/src/WindowsIconGenerator.cs
  • src/SingleProject/Resizetizer/src/nuget/buildTransitive/Microsoft.Maui.Resizetizer.After.targets

New files (not reverted):

  • src/SingleProject/Resizetizer/src/ResizeQuality.cs

📋 Pre-Flight — Context & Validation

Issue: #25686 - made FilterQuality configurable for Resizetizer
PR: #34559 - Add configurable ResizeQuality for Resizetizer
Platforms Affected: android, build-time Resizetizer assets across platforms
Files Changed: 14 implementation, 9 test

Key Findings

Code Review Summary

Verdict: NEEDS_DISCUSSION
Confidence: low
Errors: 0 | Warnings: 0 | Suggestions: 0

Key code review findings:

  • ℹ No current code findings. Prior issues around metadata invalidation and undefined numeric enum values appear addressed in the PR head.
  • ℹ CI/gate status remains undetermined, so the code-review verdict cannot be LGTM under the skill rules.

Fix Candidates

# Source Approach Test Result Files Changed Notes
PR PR #34559 ResizeQuality enum/metadata, SkiaSharp sampling options, sidecar metadata invalidation for images/icons/splash ⚠️ INCONCLUSIVE (Gate) src/SingleProject/Resizetizer/**, tests, in-tree props/targets Original PR; gate was handled separately and not rerun

🔬 Code Review — Deep Analysis

Code Review — PR #34559

Independent Assessment

What this changes: Adds ResizeQuality metadata for Resizetizer image resizing, mapping Auto/Best/Fastest to SkiaSharp sampling options and threading that through images, app icons, adaptive icons, splash assets, and incremental invalidation inputs.

Inferred motivation: Let developers trade image quality vs build speed while preserving default output compatibility.

Reconciliation with PR Narrative

Author claims: Configurable Resizetizer quality, default-compatible Auto, metadata-aware invalidation, tests, and in-tree BuildTasks import guard.

Agreement/disagreement: The current code matches those claims. Prior incremental invalidation gaps called out in earlier reviews appear addressed in the current head.

Prior Review Reconciliation

Prior ❌ Error Finding Source Status Evidence
Missing/incorrect enum XML docs issue/inline comments ✅ Fixed ResizeQuality.cs has valid summaries and no stale file-size/downscale-overpromise wording.
MauiImage ResizeQuality missing from inputs issue comment ✅ Fixed Microsoft.Maui.Resizetizer.After.targets:344 includes ResizeQuality=%(ResizeQuality).
Splash ResizeQuality missing from inputs MauiBot/kubaflo inline ✅ Fixed Microsoft.Maui.Resizetizer.After.targets:356 includes ResizeQuality=%(ResizeQuality).
App/adaptive icon outputs stale after metadata-only changes MauiBot inline ✅ Fixed ResizetizeImages.cs:223 and AndroidAdaptiveIconGenerator.cs:85,127,169 use Resizer.IsUpToDate(..., InputsFile, ...); Resizer.cs:86-110 compares inputs-file mtime.
Undefined numeric enum values accepted MauiBot inline ✅ Fixed ResizeImageInfo.cs:125-126 checks Enum.IsDefined.

Blast Radius Assessment

  • Runs for all instances: Yes, Resizetizer tasks run for MAUI image/icon/splash processing, but behavior defaults to Auto.
  • Startup impact: No runtime app startup impact; build-time asset generation only.
  • Static/shared state: No new meaningful shared state beyond existing SkiaSharp retry statics.

External Output Contract

Consumer token/pattern Producer location Producer emission condition Consumer assumption Ordinary negative case Downstream effect
N/A N/A N/A N/A N/A No changed code classifies external tool output.

CI Status

  • Required-check result: pending/undetermined. gh pr checks --required was unavailable due missing auth; public check-runs for head 3b29bba... show maui-pr queued and Build Analysis / one integration leg still in progress.
  • Classification: undetermined.
  • Action taken: invoked azdo-build-investigator skill context; confidence capped low and verdict cannot be LGTM while checks are pending.

Findings

No current code findings.

Failure-Mode Probing

  • Metadata-only quality change after prior build: current inputs-file mtime is included in freshness checks, so affected outputs should regenerate.
  • Optional app icon parts absent: Resizer.IsUpToDate skips null/empty input paths while still requiring the inputs file and output to exist; manufactured outputs can still be considered up to date by metadata timestamp.
  • Invalid ResizeQuality: undefined names/numeric values fall back to Auto.

Verdict: NEEDS_DISCUSSION

Confidence: low
Summary: Code review found no unresolved correctness issues in the current head, and prior major findings appear fixed. CI is still pending/undetermined, so this cannot be LGTM under the skill rules.


🛠️ Fix — Analysis & Comparison

Fix Candidates

# Source Approach Test Result Files Changed Notes
1 try-fix Centralize ResizeQuality normalization and SKSamplingOptions mapping in an internal policy helper ⚠️ Blocked 3 files Metadata parsing tests passed (14/14), but broader Skia raster/SVG tests blocked by missing libSkiaSharp; expert review clean
2 try-fix Parse only documented ResizeQuality names, rejecting numeric enum metadata tokens to Auto ✅ Pass (targeted) 2 files Metadata parser tests passed (17/17); expert review clean; additive robustness improvement
3 try-fix Default missing ResizeQuality metadata to Auto in MSBuild before writing input sidecar files ✅ Pass (targeted) 2 files Target-file tests passed (2/2); expert review clean; additive incremental-build consistency improvement
PR PR #34559 ResizeQuality enum/metadata, direct SkiaSharp sampling mapping, and sidecar metadata invalidation ⚠️ INCONCLUSIVE (Gate) 23 files Original PR; gate was provided as inconclusive and not rerun

Cross-Pollination

Model Round New Ideas? Details
maui-expert-reviewer 2 No Attempts 1-3 cover the meaningful non-Skia-testable alternatives; remaining options are refinements of parsing/defaulting/up-to-date policy or require native Skia verification.

Exhausted: Yes
Selected Fix: PR's fix — No standalone candidate could be proven better than the PR's current fix under the environment blocker. Candidate #2 and Candidate #3 are clean, targeted, additive improvements worth considering, but neither replaces the PR's core Skia sampling implementation and neither received full Skia-native regression coverage here.

Attempt Narratives

try-fix-1

See ../try-fix-1/content.md.

try-fix-2

See ../try-fix-2/content.md.

try-fix-3

See ../try-fix-3/content.md.


🏁 Report — Final Recommendation

Comparative Report — PR #34559

Candidates compared

Candidate Result status Reviewer findings Summary
pr ⚠️ Gate inconclusive 0 current findings Complete implementation of configurable Resizetizer ResizeQuality, including Skia sampling, metadata propagation, sidecar invalidation, and tests.
pr-plus-reviewer ⚠️ Gate inconclusive 0 findings Same as pr; the expert reviewer found no actionable feedback to apply.
try-fix-1 ⚠️ Blocked 0 findings Centralizes quality normalization and sampling mapping. Clean refactor, but broader Skia-native regression coverage was blocked and it does not supersede the PR's complete implementation.
try-fix-2 ✅ Targeted pass 0 findings Additive parser hardening: accepts only documented enum names and rejects numeric metadata values to Auto. Useful refinement, but narrower than the PR fix and already covered by the PR's undefined numeric fallback for invalid values.
try-fix-3 ✅ Targeted pass 0 findings Additive MSBuild-side defaulting so omitted and explicit Auto metadata are equivalent in sidecar files. Useful incremental-build refinement, but narrower than the PR fix and not a replacement for the full sampling implementation.

Regression-test ranking rule

No candidate has a confirmed regression-test failure that should rank it below a passing candidate. The PR/gate status is inconclusive, not failing, because the supplied gate result identifies build/environment errors and Skia native library loading blockers. try-fix-1 is likewise blocked by missing libSkiaSharp; try-fix-2 and try-fix-3 passed their targeted non-native coverage but do not validate the full Resizetizer output surface.

Analysis

The submitted PR is the only candidate that fully implements the feature requested by #25686: public-ish internal ResizeQuality semantics, metadata parsing, quality-to-Skia sampling behavior, propagation through raster/SVG/app icon/adaptive icon/monochrome/splash paths, and metadata-aware incremental invalidation. The expert review pass produced no inline findings, so the pr-plus-reviewer candidate is identical to pr.

The try-fix candidates are useful refinements, not standalone replacements. try-fix-1 improves maintainability by centralizing policy, but it is a refactor of the PR behavior and lacks full Skia-native verification in this environment. try-fix-2 and try-fix-3 passed targeted tests, but each covers a narrow edge of the already-complete PR implementation rather than replacing the end-to-end fix.

Winner

Winner: pr

Rationale: The raw PR fix is review-clean, covers the complete requested behavior, and has no actionable expert-review changes to apply. Because pr-plus-reviewer is identical and the try-fix candidates are narrower additive alternatives, the submitted PR remains the best single candidate.


🧭 Next Steps — review latest findings

No alternative fix was selected for this run. Review the session findings and CI results before merging.

@kubaflo

kubaflo commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Empirical review results

Verdict: LGTM — no blocking code findings. The PR's implementation is the best of the tested approaches. I recommend merging after the PR description metadata is corrected.

What I tested

  • Full Resizetizer suite: 654 passed, 2 Windows-only skips, 0 failures.
  • Test gate: 7 affected Resizetizer test classes fail without the feature and pass with it.
  • Actual behavior: default/explicit Auto remain pixel-identical for the covered integer-sized inputs; Best and Fastest materially select different sampling output.
  • Incremental behavior: metadata-only quality changes regenerate raster/SVG images, app icons, adaptive/monochrome icons, and splash assets.
  • Alternative exploration: 6 alternative implementation/invalidation strategies passed the focused 395-test surface. The PR's explicit immutable quality plumbing and manifest-based freshness model remained the most robust choice.

Platform evidence

I ran the real ResizetizeImages.Execute() production task with raster, SVG, and app-icon inputs:

Platform Result CopiedResources PNGs Errors
Android PASS 47 45 0
iOS PASS 27 26 0
MacCatalyst PASS 17 17 0

MacCatalyst uses the iOS Resizetizer backend. Pure macOS is not a separate Resizetizer backend; the PR's macOS build, pack, and integration lanes are green.

Current CI: maui-pr build 1537518 succeeded with 30 successful checks, 1 skipped, 0 failing, including RunOnAndroid and all iOS integration variants. Separate maui-pr-devicetests and maui-pr-uitests pipelines were not run; they are not needed to validate this build-time asset-generation change.

Visual evidence

These are the actual PNG bytes produced by the production Resizetizer code path, not mocked filters.

Raster: source / Auto / Best / Fastest

Raster ResizeQuality comparison

camera_color.png was resized from 256x256 to 1024x1024. Mean absolute luminance difference vs Auto: Best 0.220, Fastest 0.751.

SVG upscale: Auto / Best / Fastest

SVG ResizeQuality comparison

dotnet_bot.svg was upscaled 4x from a 250x281 CullRect to 1000x1124. Auto and Best are byte-identical because both preserve direct vector rendering; Fastest rasterizes and nearest-neighbor upscales as intended.

Platform/task and CI summary

Platform validation summary

Short comparison video

resizequality_cycle.mp4

These are build-time generated-asset comparisons, not simulator/device UI screenshots. That is the relevant output for this PR: the generated PNGs that are packaged into the app.

Review findings

No blocking correctness issues remain. Prior findings around SVG Fastest upscaling, undefined enum values, icon/splash metadata invalidation, and incremental app-icon generation are fixed in the current head.

Non-blocking notes:

  1. Exact Auto compatibility has a narrow fractional-SVG caveat: downscaling now uses ceiling-sized intermediates instead of truncating dimensions, which can slightly change those outputs while avoiding the old clipping behavior.
  2. Best SVG downscaling could preserve antialiasing on its intermediate vector rasterization.
  3. The color-only adaptive-background path may regenerate unnecessarily when its source path does not exist; this is a performance concern, not an output-correctness problem.

PR description corrections

  1. Change Fixes #25686 to Fixes #25750. Number 25686 is the superseded community PR; 8.0.92 make app size bigger #25750 is the underlying open issue.
  2. Update the "Latest maui-pr run" link from build 1511407 to build 1537518, or remove the word "Latest".
  3. Consider documenting or separating the unrelated dispatcher/device-test/Avalonia branch-maintenance changes still present in the diff.
Raw output hashes
Output SHA-256
Raster Auto ac1a284ebc0df4439a5e79f02594e81c93ee6a558c5542e6e224d4d66d715904
Raster Best 9056e255f6362b0880183e10f2c1e43de3147cf73a1707d1134d066a72422d12
Raster Fastest dfa5018aad938327931ae9f8d968405637b24f3cad70ae0d497bc59c704cbc67
SVG Auto ad228c3af19f8642e7055ce68b72720fe47fb4419d2ea6f1389f390e916c3e61
SVG Best ad228c3af19f8642e7055ce68b72720fe47fb4419d2ea6f1389f390e916c3e61
SVG Fastest 52bf7e541eb8079413ca2a9125d4c0fc1b13411d15ab0e2933e150a301873e20

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: ec56cb07-d0e4-49cf-90fc-7c86d816e36a

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 23/23 changed files
  • Comments generated: 0 new

@kubaflo

kubaflo commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Updated-head empirical re-review: REQUEST CHANGES

Correction to my earlier review: that result covered head 3b29bba. I repeated the review at current head f9d67f66 after the net11.0 merge and found a real integration regression.

Blocking finding

ResizeQuality is dropped when the new themed splash paths clone ResizeImageInfo:

  • GenerateSplashAssetCatalog.CloneForAsset omits Quality, so Apple asset-catalog light and dark splash images use Auto.
  • ResizeImageInfo.CreateDarkVariant omits Quality, so Android dark/night splash images use Auto.

Changing ResizeQuality still changes mauisplash.inputs and triggers regeneration, but the regenerated themed pixels are identical. This makes the option a silent no-op on those paths.

Empirical platform results

Production MSBuild tasks, Fastest vs Auto, 1792 -> 64 PNG downscale:

Path Platform(s) Differing pixels Result
Android light splash Android 616 / 4096 Quality applied
Android dark/night splash Android 0 / 4096 Quality ignored
Apple asset-catalog light iOS + MacCatalyst 0 / 4096 Quality ignored
Apple asset-catalog dark iOS + MacCatalyst 0 / 4096 Quality ignored

The Android light control proves the source and comparison detect sampling changes. MacCatalyst regular MauiImage processing also works: Fastest vs Auto and Best vs Auto each differed by 792 pixels. The regression is limited to the clone-based themed/dark splash paths added by the merge.

Fastest vs Auto output and pixel-difference evidence

Video walkthrough:

themed-splash-resizequality-regression.mp4

Tests

  • Current head full Resizetizer suite: 681 passed, 2 Windows-only skipped, 0 failed.
  • Standalone regression gate on current head: 3 failed, 1 passed.
    • Failed: Apple light, Apple dark, Android dark.
    • Passed control: Android light.
  • With the selected two-line candidate fix: focused gate 4/4 passed; full injected suite 685 passed, 2 skipped.
  • The inherited themed-splash tests currently require WarningsNotAsErrors/NoWarn=xUnit2031 under the local preview.7 SDK because nine xUnit2031 diagnostics are promoted to errors; no source was changed for that workaround.

CI at the updated head

Current maui-pr build 1542519 is green: 26/26 jobs succeeded, including macOS/Windows builds, RunOnAndroid, and iOS integration jobs. The build tested merge commit bc822f6, whose second parent is this exact PR head f9d67f66.

No maui-pr-devicetests or maui-pr-uitests build exists for this PR ref. More importantly, the green main pipeline does not contain assertions for themed clone quality, so it does not detect this regression.

Recommended fix

Preserve quality at both clone boundaries:

// GenerateSplashAssetCatalog.CloneForAsset
Quality = info.Quality,

// ResizeImageInfo.CreateDarkVariant
Quality = Quality,

Add regression tests that require Fastest and Auto to produce different pixels for:

  1. Apple asset-catalog light splash.
  2. Apple asset-catalog dark splash.
  3. Android dark/night splash.

I tested five alternatives with four models. All passed, but the direct two-line propagation above is the safest: it changes only the missing metadata, while the alternatives introduced a broader clone abstraction, a Resizer override, a settings-copy helper, or mutable-record equality semantics.

PR description follow-up

Recommendation remains REQUEST CHANGES for f9d67f66.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: ec56cb07-d0e4-49cf-90fc-7c86d816e36a

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 23/23 changed files
  • Comments generated: 0 new

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: ec56cb07-d0e4-49cf-90fc-7c86d816e36a
@kubaflo

kubaflo commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Newest-head re-review (943428ab): REQUEST CHANGES

I repeated the full review after the two new commits:

  • 484a562 - adds FastestQualityAffectsCameraSvgUpscaling
  • 943428a - empty product-code retry commit after CI infrastructure failure

The new SVG test is valid and passes, but neither commit changes the previously reported themed splash clone paths. The blocker is therefore unchanged.

What passed

  • New SVG empirical test: 1/1 passed
  • Repository Resizetizer suite: 682 passed, 2 Windows-only skipped
  • Current maui-pr build 1543333: 26/26 jobs succeeded
  • Build 1543333 tested merge commit fa3629a, whose PR parent is exact head 943428ab

The previous build 1543188 failed three macOS legs because the hosted agent could not download microsoft-openjdk@17 from aka.ms. The retry was appropriate and confirms that failure was infrastructure, not this code.

Blocking regression still reproduces

ResizeQuality is still omitted by:

  • GenerateSplashAssetCatalog.CloneForAsset - Apple/iOS/MacCatalyst themed light and dark assets
  • ResizeImageInfo.CreateDarkVariant - Android dark/night assets

Fresh production-task output at 943428ab, Fastest vs Auto, 1792 -> 64:

Path Platform(s) Differing pixels Result
Android light splash Android 616 / 4096 Quality applied
Android dark/night splash Android 0 / 4096 Quality ignored
Apple asset-catalog light iOS + MacCatalyst 0 / 4096 Quality ignored
Apple asset-catalog dark iOS + MacCatalyst 0 / 4096 Quality ignored

Fresh head 943428ab Fastest-vs-Auto evidence

Video:

themed-splash-regression-943428ab.mp4

Gate and fix verification

  • Current head external themed gate: 3 failed, 1 passed
  • Full suite with failing gate injected: 683 passed, 3 failed, 2 skipped
  • Selected two-line fix: focused 4/4 passed; full injected suite 686 passed, 2 skipped

Recommended patch remains:

// GenerateSplashAssetCatalog.CloneForAsset
Quality = info.Quality,

// ResizeImageInfo.CreateDarkVariant
Quality = Quality,

I reran the mandatory multi-model exploration from scratch on this head. Six approaches passed (direct copies, general copy, Resizer override, narrow settings copy, original ITaskItem lookup, and record cloning). The two direct assignments remain safest because they fix exactly the missing metadata without adding broader copying, MSBuild coupling, constructor state, or equality changes.

Please also add themed regression tests for Apple light, Apple dark, and Android dark/night.

CI/metadata notes

  • No maui-pr-devicetests or maui-pr-uitests build exists for this PR ref.
  • The description still links stale build 1511407; current is 1543333.
  • Fixes #25686 should still be Fixes #25750; made FilterQuality configurable for Resizetizer #25686 is the earlier community PR.
  • The description's complete splash-propagation claim remains inaccurate until the clone paths are fixed.

Recommendation remains REQUEST CHANGES for 943428ab.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: ec56cb07-d0e4-49cf-90fc-7c86d816e36a

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 26/26 changed files
  • Comments generated: 0 new

@jfversluis

Copy link
Copy Markdown
Member Author

The themed-splash ResizeQuality regression is fixed in a6f7f810c7 and verified end to end.

Root cause

The themed splash work merged from net11.0 introduced two new ResizeImageInfo construction paths that did not copy Quality:

  • GenerateSplashAssetCatalog.CloneForAsset for Apple light/dark assets
  • ResizeImageInfo.CreateDarkVariant for Apple dark and Android dark/night assets

Because ResizeQuality defaults to Auto, those derived assets silently ignored the configured quality even though metadata changes still caused regeneration. This explains why the feature had previously been working and approved, then regressed after the themed-splash merge.

Empirical red/green evidence

Using the production splash tasks with images/camera.png (1792×1792), BaseSize=64, and comparing ResizeQuality=Fastest against Auto:

Production path Before fix After fix
Apple light asset 0 / 4096 differing pixels 616 / 4096 differing pixels
Apple dark asset 0 / 4096 differing pixels 616 / 4096 differing pixels
Android dark/night asset 0 / 4096 differing pixels 616 / 4096 differing pixels

The new tests exercise GenerateSplashAssetCatalog and GenerateSplashAndroidResources directly and require more than 1% of pixels to differ, so a no-op or incidental one-pixel difference cannot pass.

Validation

  • Focused themed-splash regression tests: 3 passed
  • Full Resizetizer suite: 685 passed, 2 skipped
  • Four independent fix alternatives were evaluated; all reviewers selected the direct two-property propagation fix as the narrowest and safest approach.
  • Final multi-model code review found no blocking correctness issues.
  • Post-fix maui-pr build 1544479: succeededhttps://dev.azure.com/dnceng-public/public/_build/results?buildId=1544479
  • Latest Copilot review examined all 26 changed files and generated 0 new comments.
  • All review conversations are resolved.

@kubaflo, the regression you identified is now covered by production-task pixel evidence on every affected themed path. Please re-review when possible; the remaining CHANGES_REQUESTED state predates these fixes and resolved conversations.

@kubaflo

kubaflo commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Newest-head re-review (a6f7f810): LGTM — prior blocker fixed

I repeated the full code review, fail-without/pass-with regression gate, Android/iOS/MacCatalyst production-task testing, full Resizetizer suite, independent fix exploration, and exact-head CI analysis after:

  • a6f7f810Preserve resize quality for themed splash assets

This commit resolves the blocker from my two previous reviews. It adds the two missing assignments:

  • GenerateSplashAssetCatalog.CloneForAsset: Quality = info.Quality
  • ResizeImageInfo.CreateDarkVariant: Quality = Quality

It also adds direct regression coverage for Apple light/dark assets and Android dark/night assets.

Empirical regression proof

The three new production-task cases behave correctly:

State Android dark/night Apple light Apple dark
Without only the two new assignments ❌ fail ❌ fail ❌ fail
With a6f7f810 ✅ pass ✅ pass ✅ pass
  • Focused gate without fix: 0 passed, 3 failed
  • Focused gate with fix: 3 passed, 0 failed
  • Full Resizetizer suite: 685 passed, 2 Windows-only skipped, 0 failed

Fresh production-task outputs on macOS, using the same 1792 -> 64 PNG input:

Path Platform(s) Fastest vs Auto Result
Android light splash Android 616 / 4096 pixels Quality applied
Android dark/night splash Android 616 / 4096 pixels Quality applied
Apple asset-catalog light iOS + MacCatalyst 616 / 4096 pixels Quality applied
Apple asset-catalog dark iOS + MacCatalyst 616 / 4096 pixels Quality applied

Fixed head a6f7f810 Fastest-vs-Auto evidence

Video:

themed-splash-fix-a6f7f810.mp4

Code review and additional probe

No blocking correctness findings remain. A low-confidence question was raised about omitting the outer SKPaint while rasterizing non-Auto SVGs. I reproduced that operation directly with vector curves and a diagonal stroke: drawing with versus without new SKPaint { IsAntialias = true } produced 0 / 4096 differing pixels, so the concern did not reproduce.

Alternative-fix comparison

The required four-model exploration and three cross-pollination rounds covered:

  • centralized metadata copying
  • live source-linked quality resolution
  • MemberwiseClone
  • copy constructor/factory materialization
  • source-backed overlay variants
  • MSBuild item pre-expansion
  • scoped in-place reuse

Five alternatives passed the focused tests and two were safely blocked by the baseline file boundary. The PR's two direct assignments remain the best solution: they are the smallest change, preserve existing object semantics, and fix exactly the two demonstrated omissions.

Exact-head CI

  • Required checks: passed
  • maui-pr build 1544479: succeeded
  • Build merge SHA: 6e75bd9
  • Merge parents include exact PR head a6f7f810
  • Build Analysis: no known issues and no unmatched failures
  • No maui-pr-devicetests or maui-pr-uitests build was triggered for this PR ref

Description cleanup before merge

The implementation and title are good. The description should still:

  • update stale build 1511407 to 1544479
  • change Fixes #25686 to Fixes #25750 (#25686 is the earlier community PR)
  • mention the bundled Avalonia template skips, or split that unrelated CI change

Final recommendation: LGTM. The previous themed-splash REQUEST CHANGES finding is resolved at a6f7f810.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-single-project Splash Screen, Multi-Targeting, MauiFont, MauiImage, MauiAsset, Resizetizer s/agent-changes-requested AI agent recommends changes - found a better alternative or issues s/agent-fix-pr-picked AI could not beat the PR fix - PR is the best among all candidates s/agent-reviewed PR was reviewed by AI agent workflow (full 4-phase review)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants