anchor.diff:            ..style = PaintingStyle.fill
             ..color = const Color.fromARGB(128, 255, 0, 0));
       rc.restore();
  -    await _checkScreenshot(rc, 'canvas_blend_circle_diff_color');
  +    await _checkScreenshot(rc, 'canvas_blend_circle_diff_color',
  +        maxDiffRatePercent: operatingSystem == OperatingSystem.macOs ? 2.95 : 0);
     });
   
     test('Blend circle and text with multiply', () async {
  
positive.code:     try {
        sceneElement.append(engineCanvas.rootElement);
        html.document.body.append(sceneElement);
        await matchGoldenFile('$fileName.png', region: region, maxDiffRatePercent: 0.0);
      } finally {
        // The page is reused across tests, so remove the element after taking the
        // Scuba screenshot.
  
negative.code: 
    // Commit a recording canvas to a bitmap, and compare with the expected
    Future<void> _checkScreenshot(RecordingCanvas rc, String fileName,
        {Rect region = const Rect.fromLTWH(0, 0, 500, 500),
         double maxDiffRatePercent = 0.0}) async {
      final EngineCanvas engineCanvas = BitmapCanvas(screenRect);
  
      rc.apply(engineCanvas);
  