def testInvalidArgs(self):
     with self.assertRaises(AssertionError):
         algo.SobelMatchingAlgorithm(1, 2, -1)
     with self.assertRaises(AssertionError):
         algo.SobelMatchingAlgorithm(1, 2, 256)
     with self.assertRaises(RuntimeError):
         algo.SobelMatchingAlgorithm(1, 2, 255)
 def testGetCmdline(self):
   a = algo.SobelMatchingAlgorithm(1, 2, 3)
   cmdline = a.GetCmdline()
   self.assertEqual(cmdline, [
       '--add-test-optional-key',
       'image_matching_algorithm:sobel',
       '--add-test-optional-key',
       'fuzzy_max_different_pixels:1',
       '--add-test-optional-key',
       'fuzzy_pixel_delta_threshold:2',
       '--add-test-optional-key',
       'sobel_edge_threshold:3',
   ])
示例#3
0
 def GpuRasterizationPages(base_name):
     browser_args = [
         cba.FORCE_GPU_RASTERIZATION,
         cba.DISABLE_SOFTWARE_COMPOSITING_FALLBACK,
     ]
     return [
         PixelTestPage('pixel_background.html',
                       base_name + '_GpuRasterization_BlueBox',
                       test_rect=[0, 0, 220, 220],
                       browser_args=browser_args),
         PixelTestPage('concave_paths.html',
                       base_name + '_GpuRasterization_ConcavePaths',
                       test_rect=[0, 0, 100, 100],
                       browser_args=browser_args),
         PixelTestPage('pixel_precision_rounded_corner.html',
                       base_name + '_PrecisionRoundedCorner',
                       test_rect=[0, 0, 400, 400],
                       browser_args=browser_args,
                       matching_algorithm=algo.SobelMatchingAlgorithm(
                           max_different_pixels=10,
                           pixel_delta_threshold=30,
                           edge_threshold=100)),
     ]
示例#4
0
 def GpuRasterizationPages(base_name):
     browser_args = [
         '--force-gpu-rasterization',
         '--disable-software-compositing-fallback'
     ]
     return [
         PixelTestPage('pixel_background.html',
                       base_name + '_GpuRasterization_BlueBox',
                       test_rect=[0, 0, 220, 220],
                       browser_args=browser_args),
         PixelTestPage('concave_paths.html',
                       base_name + '_GpuRasterization_ConcavePaths',
                       test_rect=[0, 0, 100, 100],
                       browser_args=browser_args),
         PixelTestPage('pixel_precision_rounded_corner.html',
                       base_name + '_PrecisionRoundedCorner',
                       test_rect=[0, 0, 400, 400],
                       browser_args=browser_args,
                       matching_algorithm=algo.SobelMatchingAlgorithm(
                           max_different_pixels=10,
                           pixel_delta_threshold=30,
                           edge_threshold=100)),
     ]
示例#5
0
    def DirectCompositionPages(base_name):
        browser_args = [
            '--enable-direct-composition-video-overlays',
            # All bots are connected with a power source, however, we want to to
            # test with the code path that's enabled with battery power.
            cba.DISABLE_VP_SCALING,
        ]
        browser_args_YUY2 = browser_args + [
            '--disable-features=DirectCompositionPreferNV12Overlays'
        ]
        browser_args_DXVA = browser_args + [
            cba.DISABLE_FEATURES_D3D11_VIDEO_DECODER
        ]

        # Most tests fall roughly into 3 tiers of noisiness.
        # Parameter values were determined using the automated optimization script,
        # and similar values combined into a single set using the most permissive
        # value for each parameter in that tier.
        strict_dc_sobel_algorithm = algo.SobelMatchingAlgorithm(
            max_different_pixels=1000,
            pixel_delta_threshold=5,
            edge_threshold=250,
            ignored_border_thickness=1)
        permissive_dc_sobel_algorithm = algo.SobelMatchingAlgorithm(
            max_different_pixels=16800,
            pixel_delta_threshold=20,
            edge_threshold=30,
            ignored_border_thickness=1)
        very_permissive_dc_sobel_algorithm = algo.SobelMatchingAlgorithm(
            max_different_pixels=30400,
            pixel_delta_threshold=45,
            edge_threshold=10,
            ignored_border_thickness=1,
        )

        return [
            PixelTestPage('pixel_video_mp4.html',
                          base_name + '_DirectComposition_Video_MP4',
                          test_rect=[0, 0, 240, 135],
                          browser_args=browser_args,
                          matching_algorithm=permissive_dc_sobel_algorithm),
            PixelTestPage('pixel_video_mp4.html',
                          base_name + '_DirectComposition_Video_MP4_DXVA',
                          browser_args=browser_args_DXVA,
                          test_rect=[0, 0, 240, 135],
                          matching_algorithm=permissive_dc_sobel_algorithm),
            PixelTestPage('pixel_video_mp4_fullsize.html',
                          base_name + '_DirectComposition_Video_MP4_Fullsize',
                          browser_args=browser_args,
                          test_rect=[0, 0, 960, 540],
                          other_args={'zero_copy': True},
                          matching_algorithm=strict_dc_sobel_algorithm),
            PixelTestPage('pixel_video_mp4.html',
                          base_name + '_DirectComposition_Video_MP4_YUY2',
                          test_rect=[0, 0, 240, 135],
                          browser_args=browser_args_YUY2,
                          other_args={'expect_yuy2': True},
                          matching_algorithm=permissive_dc_sobel_algorithm),
            PixelTestPage('pixel_video_mp4_four_colors_aspect_4x3.html',
                          base_name +
                          '_DirectComposition_Video_MP4_FourColors_Aspect_4x3',
                          test_rect=[0, 0, 240, 135],
                          browser_args=browser_args,
                          matching_algorithm=permissive_dc_sobel_algorithm),
            PixelTestPage('pixel_video_mp4_four_colors_rot_90.html',
                          base_name +
                          '_DirectComposition_Video_MP4_FourColors_Rot_90',
                          test_rect=[0, 0, 270, 240],
                          browser_args=browser_args,
                          other_args={'video_is_rotated': True},
                          matching_algorithm=strict_dc_sobel_algorithm),
            PixelTestPage('pixel_video_mp4_four_colors_rot_180.html',
                          base_name +
                          '_DirectComposition_Video_MP4_FourColors_Rot_180',
                          test_rect=[0, 0, 240, 135],
                          browser_args=browser_args,
                          other_args={'video_is_rotated': True},
                          matching_algorithm=strict_dc_sobel_algorithm),
            PixelTestPage('pixel_video_mp4_four_colors_rot_270.html',
                          base_name +
                          '_DirectComposition_Video_MP4_FourColors_Rot_270',
                          test_rect=[0, 0, 270, 240],
                          browser_args=browser_args,
                          other_args={'video_is_rotated': True},
                          matching_algorithm=strict_dc_sobel_algorithm),
            PixelTestPage(
                'pixel_video_vp9.html',
                base_name + '_DirectComposition_Video_VP9',
                test_rect=[0, 0, 240, 135],
                browser_args=browser_args,
                matching_algorithm=very_permissive_dc_sobel_algorithm),
            PixelTestPage(
                'pixel_video_vp9.html',
                base_name + '_DirectComposition_Video_VP9_DXVA',
                browser_args=browser_args_DXVA,
                test_rect=[0, 0, 240, 135],
                matching_algorithm=very_permissive_dc_sobel_algorithm),
            PixelTestPage(
                'pixel_video_vp9_fullsize.html',
                base_name + '_DirectComposition_Video_VP9_Fullsize',
                test_rect=[0, 0, 960, 540],
                browser_args=browser_args,
                other_args={'zero_copy': True},
                # Much larger image than other VP9 tests.
                matching_algorithm=algo.SobelMatchingAlgorithm(
                    max_different_pixels=504000,
                    pixel_delta_threshold=10,
                    edge_threshold=10,
                    ignored_border_thickness=1,
                )),
            PixelTestPage(
                'pixel_video_vp9.html',
                base_name + '_DirectComposition_Video_VP9_YUY2',
                test_rect=[0, 0, 240, 135],
                browser_args=browser_args_YUY2,
                other_args={'expect_yuy2': True},
                matching_algorithm=very_permissive_dc_sobel_algorithm),
            PixelTestPage('pixel_video_vp9_i420a.html',
                          base_name + '_DirectComposition_Video_VP9_I420A',
                          test_rect=[0, 0, 240, 135],
                          browser_args=browser_args,
                          other_args={'no_overlay': True},
                          matching_algorithm=strict_dc_sobel_algorithm),
            PixelTestPage('pixel_video_underlay.html',
                          base_name + '_DirectComposition_Underlay',
                          test_rect=[0, 0, 240, 136],
                          browser_args=browser_args,
                          matching_algorithm=permissive_dc_sobel_algorithm),
            PixelTestPage('pixel_video_underlay.html',
                          base_name + '_DirectComposition_Underlay_DXVA',
                          test_rect=[0, 0, 240, 136],
                          browser_args=browser_args_DXVA,
                          matching_algorithm=permissive_dc_sobel_algorithm),
            PixelTestPage('pixel_video_underlay_fullsize.html',
                          base_name + '_DirectComposition_Underlay_Fullsize',
                          test_rect=[0, 0, 960, 540],
                          browser_args=browser_args,
                          other_args={'zero_copy': True},
                          matching_algorithm=strict_dc_sobel_algorithm),
            PixelTestPage('pixel_video_mp4_rounded_corner.html',
                          base_name +
                          '_DirectComposition_Video_MP4_Rounded_Corner',
                          test_rect=[0, 0, 240, 135],
                          browser_args=browser_args,
                          other_args={'no_overlay': True}),
            PixelTestPage('pixel_video_backdrop_filter.html',
                          base_name +
                          '_DirectComposition_Video_BackdropFilter',
                          test_rect=[0, 0, 240, 135],
                          browser_args=browser_args,
                          other_args={'no_overlay': True}),
            PixelTestPage(
                'pixel_video_mp4.html',
                base_name + '_DirectComposition_Video_Disable_Overlays',
                test_rect=[0, 0, 240, 135],
                browser_args=['--disable-direct-composition-video-overlays'],
                other_args={'no_overlay': True},
                matching_algorithm=very_permissive_dc_sobel_algorithm),
        ]
示例#6
0
    def DefaultPages(base_name):
        sw_compositing_args = [cba.DISABLE_GPU_COMPOSITING]

        # The optimizer script spat out pretty similar values for most MP4 tests, so
        # combine into a single set of parameters.
        general_mp4_algo = algo.SobelMatchingAlgorithm(
            max_different_pixels=56300,
            pixel_delta_threshold=35,
            edge_threshold=80)

        return [
            PixelTestPage('pixel_background_image.html',
                          base_name + '_BackgroundImage',
                          test_rect=[20, 20, 370, 370]),
            PixelTestPage('pixel_reflected_div.html',
                          base_name + '_ReflectedDiv',
                          test_rect=[0, 0, 100, 300]),
            PixelTestPage('pixel_canvas2d.html',
                          base_name + '_Canvas2DRedBox',
                          test_rect=[0, 0, 300, 300]),
            PixelTestPage('pixel_canvas2d_untagged.html',
                          base_name + '_Canvas2DUntagged',
                          test_rect=[0, 0, 257, 257]),
            PixelTestPage('pixel_css3d.html',
                          base_name + '_CSS3DBlueBox',
                          test_rect=[0, 0, 300, 300],
                          matching_algorithm=algo.SobelMatchingAlgorithm(
                              max_different_pixels=0,
                              pixel_delta_threshold=0,
                              edge_threshold=100)),
            PixelTestPage('pixel_webgl_aa_alpha.html',
                          base_name + '_WebGLGreenTriangle_AA_Alpha',
                          test_rect=[0, 0, 300, 300]),
            PixelTestPage('pixel_webgl_noaa_alpha.html',
                          base_name + '_WebGLGreenTriangle_NoAA_Alpha',
                          test_rect=[0, 0, 300, 300]),
            PixelTestPage('pixel_webgl_aa_noalpha.html',
                          base_name + '_WebGLGreenTriangle_AA_NoAlpha',
                          test_rect=[0, 0, 300, 300]),
            PixelTestPage('pixel_webgl_noaa_noalpha.html',
                          base_name + '_WebGLGreenTriangle_NoAA_NoAlpha',
                          test_rect=[0, 0, 300, 300]),
            PixelTestPage(
                'pixel_webgl_noalpha_implicit_clear.html',
                base_name +
                '_WebGLTransparentGreenTriangle_NoAlpha_ImplicitClear',
                test_rect=[0, 0, 300, 300]),
            PixelTestPage('pixel_webgl_sad_canvas.html',
                          base_name + '_WebGLSadCanvas',
                          test_rect=[0, 0, 300, 300],
                          optional_action='CrashGpuProcess'),
            PixelTestPage('pixel_scissor.html',
                          base_name + '_ScissorTestWithPreserveDrawingBuffer',
                          test_rect=[0, 0, 300, 300]),
            PixelTestPage('pixel_canvas2d_webgl.html',
                          base_name + '_2DCanvasWebGL',
                          test_rect=[0, 0, 300, 300]),
            PixelTestPage('pixel_background.html',
                          base_name + '_SolidColorBackground',
                          test_rect=[500, 500, 100, 100]),
            PixelTestPage(
                'pixel_video_mp4.html',
                base_name + '_Video_MP4',
                test_rect=[0, 0, 240, 135],
                # Most images are actually very similar, but Pixel 2
                # tends to produce images with all colors shifted by a
                # small amount.
                matching_algorithm=general_mp4_algo),
            # Surprisingly stable, does not appear to require inexact matching.
            PixelTestPage(
                'pixel_video_mp4.html',
                base_name + '_Video_MP4_DXVA',
                browser_args=[cba.DISABLE_FEATURES_D3D11_VIDEO_DECODER],
                test_rect=[0, 0, 240, 135]),
            PixelTestPage('pixel_video_mp4_four_colors_aspect_4x3.html',
                          base_name + '_Video_MP4_FourColors_Aspect_4x3',
                          test_rect=[0, 0, 240, 135],
                          matching_algorithm=algo.SobelMatchingAlgorithm(
                              max_different_pixels=41700,
                              pixel_delta_threshold=15,
                              edge_threshold=40)),
            PixelTestPage('pixel_video_mp4_four_colors_rot_90.html',
                          base_name + '_Video_MP4_FourColors_Rot_90',
                          test_rect=[0, 0, 270, 240],
                          matching_algorithm=general_mp4_algo),
            PixelTestPage('pixel_video_mp4_four_colors_rot_180.html',
                          base_name + '_Video_MP4_FourColors_Rot_180',
                          test_rect=[0, 0, 240, 135],
                          matching_algorithm=general_mp4_algo),
            PixelTestPage('pixel_video_mp4_four_colors_rot_270.html',
                          base_name + '_Video_MP4_FourColors_Rot_270',
                          test_rect=[0, 0, 270, 240],
                          matching_algorithm=general_mp4_algo),
            PixelTestPage('pixel_video_mp4_rounded_corner.html',
                          base_name + '_Video_MP4_Rounded_Corner',
                          test_rect=[0, 0, 240, 135],
                          matching_algorithm=algo.SobelMatchingAlgorithm(
                              max_different_pixels=30500,
                              pixel_delta_threshold=15,
                              edge_threshold=70)),
            PixelTestPage('pixel_video_vp9.html',
                          base_name + '_Video_VP9',
                          test_rect=[0, 0, 240, 135],
                          matching_algorithm=algo.SobelMatchingAlgorithm(
                              max_different_pixels=114000,
                              pixel_delta_threshold=30,
                              edge_threshold=20)),
            PixelTestPage(
                'pixel_video_vp9.html',
                base_name + '_Video_VP9_DXVA',
                browser_args=[cba.DISABLE_FEATURES_D3D11_VIDEO_DECODER],
                test_rect=[0, 0, 240, 135],
                matching_algorithm=algo.SobelMatchingAlgorithm(
                    max_different_pixels=31100,
                    pixel_delta_threshold=30,
                    edge_threshold=250)),
            PixelTestPage(
                'pixel_video_media_stream_incompatible_stride.html',
                base_name + '_Video_Media_Stream_Incompatible_Stride',
                browser_args=GetMediaStreamTestBrowserArgs(
                    'media/test/data/four-colors-incompatible-stride.y4m'),
                test_rect=[0, 0, 240, 135],
                matching_algorithm=VERY_PERMISSIVE_SOBEL_ALGO),

            # The MP4 contains H.264 which is primarily hardware decoded on bots.
            PixelTestPage(
                'pixel_video_context_loss.html?src='
                '/media/test/data/four-colors.mp4',
                base_name + '_Video_Context_Loss_MP4',
                test_rect=[0, 0, 240, 135],
                # Optimizer script spat out a value of 255 for the Sobel edge
                # threshold, so use fuzzy for now since it's slightly more
                # efficient.
                matching_algorithm=algo.FuzzyMatchingAlgorithm(
                    max_different_pixels=31700, pixel_delta_threshold=20),
                expected_per_process_crashes={
                    CRASH_TYPE_GPU: 1,
                }),

            # The VP9 test clip is primarily software decoded on bots.
            PixelTestPage(('pixel_video_context_loss.html'
                           '?src=/media/test/data/four-colors-vp9.webm'),
                          base_name + '_Video_Context_Loss_VP9',
                          test_rect=[0, 0, 240, 135],
                          matching_algorithm=algo.SobelMatchingAlgorithm(
                              max_different_pixels=54400,
                              pixel_delta_threshold=30,
                              edge_threshold=250),
                          expected_per_process_crashes={
                              CRASH_TYPE_GPU: 1,
                          }),
            PixelTestPage('pixel_video_backdrop_filter.html',
                          base_name + '_Video_BackdropFilter',
                          test_rect=[0, 0, 240, 135],
                          matching_algorithm=algo.SobelMatchingAlgorithm(
                              max_different_pixels=1000,
                              pixel_delta_threshold=20,
                              edge_threshold=40,
                              ignored_border_thickness=1)),
            PixelTestPage('pixel_webgl_premultiplied_alpha_false.html',
                          base_name + '_WebGL_PremultipliedAlpha_False',
                          test_rect=[0, 0, 150, 150]),
            PixelTestPage('pixel_webgl2_blitframebuffer_result_displayed.html',
                          base_name +
                          '_WebGL2_BlitFramebuffer_Result_Displayed',
                          test_rect=[0, 0, 200, 200]),
            PixelTestPage('pixel_webgl2_clearbufferfv_result_displayed.html',
                          base_name + '_WebGL2_ClearBufferfv_Result_Displayed',
                          test_rect=[0, 0, 200, 200]),
            PixelTestPage('pixel_repeated_webgl_to_2d.html',
                          base_name + '_RepeatedWebGLTo2D',
                          test_rect=[0, 0, 256, 256]),
            PixelTestPage('pixel_repeated_webgl_to_2d.html',
                          base_name + '_RepeatedWebGLTo2D_SoftwareCompositing',
                          test_rect=[0, 0, 256, 256],
                          browser_args=sw_compositing_args),
            PixelTestPage('pixel_canvas2d_tab_switch.html',
                          base_name + '_Canvas2DTabSwitch',
                          test_rect=[0, 0, 100, 100],
                          optional_action='SwitchTabs'),
            PixelTestPage('pixel_canvas2d_tab_switch.html',
                          base_name + '_Canvas2DTabSwitch_SoftwareCompositing',
                          test_rect=[0, 0, 100, 100],
                          browser_args=sw_compositing_args,
                          optional_action='SwitchTabs'),
            PixelTestPage('pixel_webgl_copy_image.html',
                          base_name + '_WebGLCopyImage',
                          test_rect=[0, 0, 200, 100]),
            PixelTestPage('pixel_webgl_read_pixels_tab_switch.html',
                          base_name + '_WebGLReadPixelsTabSwitch',
                          test_rect=[0, 0, 100, 100],
                          optional_action='SwitchTabs'),
            PixelTestPage('pixel_webgl_read_pixels_tab_switch.html',
                          base_name +
                          '_WebGLReadPixelsTabSwitch_SoftwareCompositing',
                          test_rect=[0, 0, 100, 100],
                          browser_args=sw_compositing_args,
                          optional_action='SwitchTabs'),
            PixelTestPage('pixel_offscreen_canvas_ibrc_webgl_main.html',
                          base_name + '_OffscreenCanvasIBRCWebGLMain',
                          test_rect=[0, 0, 300, 300],
                          optional_action='RunOffscreenCanvasIBRCWebGLTest'),
            PixelTestPage('pixel_offscreen_canvas_ibrc_webgl_worker.html',
                          base_name + '_OffscreenCanvasIBRCWebGLWorker',
                          test_rect=[0, 0, 300, 300],
                          optional_action='RunOffscreenCanvasIBRCWebGLTest'),
        ]
示例#7
0
# These tests attempt to use test rects that are larger than the small screen
# on some Fuchsia devices, so we need to use a less-desirable screenshot capture
# method to get the entire page contents instead of just the visible portion.
PROBLEMATIC_FUCHSIA_TESTS = [
    'Maps_maps',
    'Pixel_BackgroundImage',
    'Pixel_PrecisionRoundedCorner',
    'Pixel_SolidColorBackground',
]

# Meant to be used when we know a test is going to be noisy, and we want any
# images it generates to be auto-triaged until we have enough data to calculate
# more suitable/less permissive parameters.
VERY_PERMISSIVE_SOBEL_ALGO = algo.SobelMatchingAlgorithm(
    max_different_pixels=100000000,
    pixel_delta_threshold=255,
    edge_threshold=0,
    ignored_border_thickness=1)


class PixelTestPage(object):
    """A wrapper class mimicking the functionality of the PixelTestsStorySet
  from the old-style GPU tests.
  """
    def __init__(  # pylint: disable=too-many-arguments
            self,
            url,
            name,
            test_rect,
            browser_args=None,
            gpu_process_disabled=False,
示例#8
0
    def DirectCompositionPages(base_name):
        browser_args = [
            '--enable-direct-composition-video-overlays',
            # All bots are connected with a power source, however, we want to to
            # test with the code path that's enabled with battery power.
            '--disable_vp_scaling=1'
        ]
        browser_args_Nonroot = browser_args + [
            '--enable-features=DirectCompositionNonrootOverlays,' +
            'DirectCompositionUnderlays'
        ]
        browser_args_Complex = browser_args + [
            '--enable-features=DirectCompositionComplexOverlays,' +
            'DirectCompositionNonrootOverlays,' + 'DirectCompositionUnderlays'
        ]
        browser_args_YUY2 = browser_args + [
            '--disable-features=DirectCompositionPreferNV12Overlays'
        ]
        browser_args_DXVA = browser_args + [
            '--disable-features=D3D11VideoDecoder'
        ]

        # Most tests fall roughly into 3 tiers of noisiness.
        # Parameter values were determined using the automated optimization script,
        # and similar values combined into a single set using the most permissive
        # value for each parameter in that tier.
        strict_dc_sobel_algorithm = algo.SobelMatchingAlgorithm(
            max_different_pixels=1000,
            pixel_delta_threshold=5,
            edge_threshold=250,
            ignored_border_thickness=1)
        permissive_dc_sobel_algorithm = algo.SobelMatchingAlgorithm(
            max_different_pixels=16800,
            pixel_delta_threshold=20,
            edge_threshold=30,
            ignored_border_thickness=1)
        very_permissive_dc_sobel_algorithm = algo.SobelMatchingAlgorithm(
            max_different_pixels=30400,
            pixel_delta_threshold=45,
            edge_threshold=10,
            ignored_border_thickness=1,
        )

        return [
            PixelTestPage('pixel_video_mp4.html',
                          base_name + '_DirectComposition_Video_MP4',
                          test_rect=[0, 0, 240, 135],
                          browser_args=browser_args,
                          matching_algorithm=permissive_dc_sobel_algorithm),
            PixelTestPage('pixel_video_mp4.html',
                          base_name + '_DirectComposition_Video_MP4_DXVA',
                          browser_args=browser_args_DXVA,
                          test_rect=[0, 0, 240, 135],
                          matching_algorithm=permissive_dc_sobel_algorithm),
            PixelTestPage('pixel_video_mp4_fullsize.html',
                          base_name + '_DirectComposition_Video_MP4_Fullsize',
                          browser_args=browser_args,
                          test_rect=[0, 0, 960, 540],
                          other_args={'zero_copy': True},
                          matching_algorithm=strict_dc_sobel_algorithm),
            PixelTestPage('pixel_video_mp4.html',
                          base_name + '_DirectComposition_Video_MP4_YUY2',
                          test_rect=[0, 0, 240, 135],
                          browser_args=browser_args_YUY2,
                          other_args={'expect_yuy2': True},
                          matching_algorithm=permissive_dc_sobel_algorithm),
            PixelTestPage('pixel_video_mp4_four_colors_aspect_4x3.html',
                          base_name +
                          '_DirectComposition_Video_MP4_FourColors_Aspect_4x3',
                          test_rect=[0, 0, 240, 135],
                          browser_args=browser_args,
                          matching_algorithm=permissive_dc_sobel_algorithm),
            PixelTestPage('pixel_video_mp4_four_colors_rot_90.html',
                          base_name +
                          '_DirectComposition_Video_MP4_FourColors_Rot_90',
                          test_rect=[0, 0, 270, 240],
                          browser_args=browser_args,
                          other_args={'video_is_rotated': True},
                          matching_algorithm=strict_dc_sobel_algorithm),
            PixelTestPage('pixel_video_mp4_four_colors_rot_180.html',
                          base_name +
                          '_DirectComposition_Video_MP4_FourColors_Rot_180',
                          test_rect=[0, 0, 240, 135],
                          browser_args=browser_args,
                          other_args={'video_is_rotated': True},
                          matching_algorithm=strict_dc_sobel_algorithm),
            PixelTestPage('pixel_video_mp4_four_colors_rot_270.html',
                          base_name +
                          '_DirectComposition_Video_MP4_FourColors_Rot_270',
                          test_rect=[0, 0, 270, 240],
                          browser_args=browser_args,
                          other_args={'video_is_rotated': True},
                          matching_algorithm=strict_dc_sobel_algorithm),
            PixelTestPage(
                'pixel_video_vp9.html',
                base_name + '_DirectComposition_Video_VP9',
                test_rect=[0, 0, 240, 135],
                browser_args=browser_args,
                matching_algorithm=very_permissive_dc_sobel_algorithm),
            PixelTestPage(
                'pixel_video_vp9.html',
                base_name + '_DirectComposition_Video_VP9_DXVA',
                browser_args=browser_args_DXVA,
                test_rect=[0, 0, 240, 135],
                matching_algorithm=very_permissive_dc_sobel_algorithm),
            PixelTestPage(
                'pixel_video_vp9_fullsize.html',
                base_name + '_DirectComposition_Video_VP9_Fullsize',
                test_rect=[0, 0, 960, 540],
                browser_args=browser_args,
                other_args={'zero_copy': True},
                # Much larger image than other VP9 tests.
                matching_algorithm=algo.SobelMatchingAlgorithm(
                    max_different_pixels=504000,
                    pixel_delta_threshold=10,
                    edge_threshold=10,
                    ignored_border_thickness=1,
                )),
            PixelTestPage(
                'pixel_video_vp9.html',
                base_name + '_DirectComposition_Video_VP9_YUY2',
                test_rect=[0, 0, 240, 135],
                browser_args=browser_args_YUY2,
                other_args={'expect_yuy2': True},
                matching_algorithm=very_permissive_dc_sobel_algorithm),
            PixelTestPage('pixel_video_vp9_i420a.html',
                          base_name + '_DirectComposition_Video_VP9_I420A',
                          test_rect=[0, 0, 240, 135],
                          browser_args=browser_args,
                          other_args={'no_overlay': True},
                          matching_algorithm=strict_dc_sobel_algorithm),
            PixelTestPage('pixel_video_underlay.html',
                          base_name + '_DirectComposition_Underlay',
                          test_rect=[0, 0, 240, 136],
                          browser_args=browser_args,
                          matching_algorithm=permissive_dc_sobel_algorithm),
            PixelTestPage('pixel_video_underlay.html',
                          base_name + '_DirectComposition_Underlay_DXVA',
                          test_rect=[0, 0, 240, 136],
                          browser_args=browser_args_DXVA,
                          matching_algorithm=permissive_dc_sobel_algorithm),
            PixelTestPage('pixel_video_underlay_fullsize.html',
                          base_name + '_DirectComposition_Underlay_Fullsize',
                          test_rect=[0, 0, 960, 540],
                          browser_args=browser_args,
                          other_args={'zero_copy': True},
                          matching_algorithm=strict_dc_sobel_algorithm),
            PixelTestPage(
                'pixel_video_nonroot.html',
                base_name + '_DirectComposition_Nonroot',
                test_rect=[0, 0, 240, 136],
                browser_args=browser_args_Nonroot,
                # Part of the expected color migration, crbug.com/1078914.
                # Migrating to a less permissive set of parameters is currently
                # blocked on crbug.com/1086758.
                grace_period_end=datetime.date(2020, 8, 26),
                matching_algorithm=VERY_PERMISSIVE_SOBEL_ALGO),
            PixelTestPage('pixel_video_complex_overlays.html',
                          base_name + '_DirectComposition_ComplexOverlays',
                          test_rect=[0, 0, 240, 136],
                          browser_args=browser_args_Complex,
                          other_args={'video_is_rotated': True},
                          matching_algorithm=strict_dc_sobel_algorithm),
            PixelTestPage('pixel_video_mp4_rounded_corner.html',
                          base_name +
                          '_DirectComposition_Video_MP4_Rounded_Corner',
                          test_rect=[0, 0, 240, 135],
                          browser_args=browser_args,
                          other_args={'no_overlay': True}),
            PixelTestPage('pixel_video_backdrop_filter.html',
                          base_name +
                          '_DirectComposition_Video_BackdropFilter',
                          test_rect=[0, 0, 240, 135],
                          browser_args=browser_args,
                          other_args={'no_overlay': True}),
            PixelTestPage(
                'pixel_video_mp4.html',
                base_name + '_DirectComposition_Video_Disable_Overlays',
                test_rect=[0, 0, 240, 135],
                browser_args=['--disable-direct-composition-video-overlays'],
                other_args={'no_overlay': True},
                matching_algorithm=very_permissive_dc_sobel_algorithm),
        ]