Changeset 284878 in webkit
- Timestamp:
- Oct 26, 2021, 10:39:19 AM (5 years ago)
- Location:
- trunk/Tools
- Files:
-
- 4 edited
-
ChangeLog (modified) (1 diff)
-
ImageDiff/ImageDiff.cpp (modified) (1 diff)
-
Scripts/webkitpy/port/image_diff.py (modified) (1 diff)
-
Scripts/webkitpy/port/port_testcase.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Tools/ChangeLog
r284875 r284878 1 2021-10-26 Simon Fraser <simon.fraser@apple.com> 2 3 The script should decide when an image diff cases, not ImageDiff 4 https://bugs.webkit.org/show_bug.cgi?id=232225 5 6 Reviewed by Martin Robinson. 7 8 Rather than have ImageDiff decide if the comparison passes or fails (with some built-in 9 tolerance), have it just print the percentage difference, and have the script compare it 10 against the tolerance. 11 12 Code to prettify diff_percent is moved into the script (but should eventually 13 move closer to display time). 14 15 * ImageDiff/ImageDiff.cpp: 16 (processImages): 17 * Scripts/webkitpy/port/image_diff.py: 18 (ImageDiffer._read): 19 * Scripts/webkitpy/port/port_testcase.py: 20 (PortTestCase.test_diff_image.make_proc): 21 (PortTestCase.test_diff_image_passed): 22 (PortTestCase): 23 (PortTestCase.test_diff_image_passed_with_tolerance): 24 (PortTestCase.test_diff_image_failed_with_rounded_diff): 25 (PortTestCase.test_diff_image_failed): 26 1 27 2021-10-26 Kate Cheney <katherine_cheney@apple.com> 2 28 -
trunk/Tools/ImageDiff/ImageDiff.cpp
r284870 r284878 66 66 PlatformImage::Difference differenceData = { 100, 0, 0 }; 67 67 auto diffImage = actualImage->difference(*baselineImage, differenceData); 68 float legacyDifference = differenceData.percentageDifference;69 if (legacyDifference <= tolerance)70 legacyDifference = 0.0f;71 else {72 legacyDifference = roundf(legacyDifference * 100.0f) / 100.0f;73 legacyDifference = std::max<float>(legacyDifference, 0.01f); // round to 2 decimal places74 }75 76 68 if (diffImage) 77 69 diffImage->writeAsPNGToStdout(); 78 70 79 if (legacyDifference > 0.0f) { 80 fprintf(stdout, "diff: %01.2f%% failed\n", legacyDifference); 81 } else 82 fprintf(stdout, "diff: %01.2f%% passed\n", legacyDifference); 71 fprintf(stdout, "diff: %01.8f%%\n", differenceData.percentageDifference); 83 72 84 73 if (printDifference) -
trunk/Tools/Scripts/webkitpy/port/image_diff.py
r284870 r284878 130 130 err_str += "ImageDiff crashed\n" 131 131 132 diff_percent = 0 133 if diff_output: 134 m = re.match(b'diff: (.+)% (passed|failed)', diff_output) 135 if m.group(2) == b'passed': 136 return ImageDiffResult(passed=True, diff_image=output_image, difference=0) 137 diff_percent = float(string_utils.decode(m.group(1), target_type=str)) 132 if not diff_output: 133 return ImageDiffResult(passed=False, diff_image=None, difference=0, tolerance=self._tolerance, error_string=err_str or "Failed to read ImageDiff output") 138 134 139 return ImageDiffResult(passed=False, diff_image=output_image, difference=diff_percent, tolerance=self._tolerance, error_string=err_str or None) 135 m = re.match(b'diff: (.+)%', diff_output) 136 if not m: 137 return ImageDiffResult(passed=False, diff_image=None, difference=0, tolerance=self._tolerance, error_string=err_str or "Failed to match ImageDiff output %s" % diff_output) 138 139 diff_percent = float(string_utils.decode(m.group(1), target_type=str)) 140 141 passed = diff_percent <= self._tolerance 142 if not passed: 143 # FIXME: This prettification should happen at display time. 144 diff_percent = round(diff_percent * 100) / 100 145 diff_percent = max(diff_percent, 0.01) 146 147 return ImageDiffResult(passed=passed, diff_image=output_image, difference=diff_percent, tolerance=self._tolerance, error_string=err_str or None) 140 148 141 149 def stop(self): -
trunk/Tools/Scripts/webkitpy/port/port_testcase.py
r284870 r284878 285 285 286 286 def make_proc(port, nm, cmd, env, crash_message=None): 287 self.proc = MockServerProcess(port, nm, cmd, env, lines=['Content-Length: 6\n', 'image1', 'diff: 90% failed\n', '#EOF\n', 'Content-Length: 6\n', 'image2', 'diff: 100% failed\n', '#EOF\n'])287 self.proc = MockServerProcess(port, nm, cmd, env, lines=['Content-Length: 6\n', 'image1', 'diff: 90%\n', '#EOF\n', 'Content-Length: 6\n', 'image2', 'diff: 100%\n', '#EOF\n']) 288 288 return self.proc 289 289 … … 326 326 def test_diff_image_passed(self): 327 327 port = self.make_port() 328 port._server_process_constructor = lambda port, nm, cmd, env, crash_message=None: MockServerProcess(lines=['diff: 0% passed\n', '#EOF\n'])328 port._server_process_constructor = lambda port, nm, cmd, env, crash_message=None: MockServerProcess(lines=['diff: 0%\n', '#EOF\n']) 329 329 image_differ = ImageDiffer(port) 330 self.assertEqual(image_differ.diff_image(b'foo', b'bar', tolerance=0.1), ImageDiffResult(passed=True, diff_image=None, difference=0)) 330 self.assertEqual(image_differ.diff_image(b'foo', b'foo', tolerance=0), ImageDiffResult(passed=True, diff_image=None, difference=0, tolerance=0)) 331 332 def test_diff_image_passed_with_tolerance(self): 333 port = self.make_port() 334 port._server_process_constructor = lambda port, nm, cmd, env, crash_message=None: MockServerProcess(lines=['Content-Length: 4\n', 'test', 'diff: 0.05%\n', '#EOF\n']) 335 image_differ = ImageDiffer(port) 336 self.assertEqual(image_differ.diff_image(b'foo', b'bar', tolerance=0.1), ImageDiffResult(passed=True, diff_image=b'test', difference=0.05, tolerance=0.1)) 337 338 def test_diff_image_failed_with_rounded_diff(self): 339 port = self.make_port() 340 port._server_process_constructor = lambda port, nm, cmd, env, crash_message=None: MockServerProcess(lines=['Content-Length: 4\n', 'test', 'diff: 0.101234%\n', '#EOF\n']) 341 image_differ = ImageDiffer(port) 342 self.assertEqual(image_differ.diff_image(b'foo', b'bar', tolerance=0.1), ImageDiffResult(passed=False, diff_image=b'test', difference=0.1, tolerance=0.1)) 331 343 332 344 def test_diff_image_failed(self): 333 345 port = self.make_port() 334 port._server_process_constructor = lambda port, nm, cmd, env, crash_message=None: MockServerProcess(lines=['Content-Length: 4\n', 'test', 'diff: 10 0% failed\n', '#EOF\n'])346 port._server_process_constructor = lambda port, nm, cmd, env, crash_message=None: MockServerProcess(lines=['Content-Length: 4\n', 'test', 'diff: 10%\n', '#EOF\n']) 335 347 image_differ = ImageDiffer(port) 336 self.assertEqual(image_differ.diff_image(b'foo', b'bar', tolerance=0.1), ImageDiffResult(passed=False, diff_image=b'test', difference=10 0.0, tolerance=0.1))348 self.assertEqual(image_differ.diff_image(b'foo', b'bar', tolerance=0.1), ImageDiffResult(passed=False, diff_image=b'test', difference=10, tolerance=0.1)) 337 349 338 350 def test_diff_image_crashed(self):
Note:
See TracChangeset
for help on using the changeset viewer.