Skip to content

Conversation

@yjbanov
Copy link
Contributor

@yjbanov yjbanov commented Apr 28, 2022

Tests running in HTML mode on LUCI sometimes produce tiny pixel deltas. They don't originate from the framework rendering something different, or any differences in the resulting HTML. Instead, in some environments Chromium renders a few pixels a tiny bit differently (worst case seen so far is 1/256 per component per pixel for a total of 8 pixels, example). This is not noticeable to a human eye, but Skia Gold catches it and fails the test, leading to flakiness.

This PR instructs Skia Gold to ignore differences of no more than 4 (component-wise manhattan distance) in no more than 20 pixels.

This is heavily inspired by the pixel matching strategy used in the web engine.

Fixes #102665

@yjbanov yjbanov requested a review from Piinks as a code owner April 28, 2022 22:34
@flutter-dashboard flutter-dashboard bot added a: tests "flutter test", flutter_test, or one of our tests framework flutter/packages/flutter repository. See also f: labels. c: contributor-productivity Team-specific productivity, code health, technical debt. labels Apr 28, 2022
@flutter-dashboard
Copy link

It looks like this pull request may not have tests. Please make sure to add tests before merging. If you need an exemption to this rule, contact Hixie on the #hackers channel in Chat (don't just cc him here, he won't see it! He's on Discord!).

If you are not sure if you need tests, consider this rule of thumb: the purpose of a test is to make sure someone doesn't accidentally revert the fix. Ask yourself, is there anything in your PR that you feel it is important we not accidentally revert back to how it was before your fix?

Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing.

@yjbanov
Copy link
Contributor Author

yjbanov commented Apr 28, 2022

What's out testing strategy for the skia gold client? We don't have a test/ directory under flutter_goldens_client.

@yjbanov
Copy link
Contributor Author

yjbanov commented Apr 28, 2022

What's out testing strategy for the skia gold client? We don't have a test/ directory under flutter_goldens_client.

Found it!

Copy link
Contributor

@harryterkelsen harryterkelsen left a comment

Choose a reason for hiding this comment

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

LGTM

}
}

// Constructs arguments for `goltctl` for controlling how pixels are compared.
Copy link
Contributor

Choose a reason for hiding this comment

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

nit: goldctl

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Done.

// because Chromium cannot exactly reproduce the same golden on all computers.
// It seems to depend on the hardware/OS/driver combination. However, those
// differences are very small (typically not noticeable to human eye).
List<String> _getPixelMatchingArguments(String testName) {
Copy link
Contributor

Choose a reason for hiding this comment

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

testName isn't used

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Done.

Copy link
Contributor

@Piinks Piinks left a comment

Choose a reason for hiding this comment

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

LGTM! Nice, Thanks!

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

Labels

a: tests "flutter test", flutter_test, or one of our tests c: contributor-productivity Team-specific productivity, code health, technical debt. framework flutter/packages/flutter repository. See also f: labels.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Linux web_tests_0 is 3.00% flaky

4 participants