xref: /aosp_15_r20/external/skia/gm/png_codec.bzl (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker"""This module defines the png_codec_tests macro."""
2*c8dee2aaSAndroid Build Coastguard Worker
3*c8dee2aaSAndroid Build Coastguard Workerload("//bazel:skia_rules.bzl", "skia_cc_test")
4*c8dee2aaSAndroid Build Coastguard Worker
5*c8dee2aaSAndroid Build Coastguard Worker# These lists of lists are shaped as follows:
6*c8dee2aaSAndroid Build Coastguard Worker#
7*c8dee2aaSAndroid Build Coastguard Worker#     [images, decode_mode, dst_color_type, dst_alpha_type, surface_config]
8*c8dee2aaSAndroid Build Coastguard Worker#
9*c8dee2aaSAndroid Build Coastguard Worker# For each such list, we will define a test that decodes each image into an SkImage using
10*c8dee2aaSAndroid Build Coastguard Worker# SkPngDecoder. The decode mode, destination color type and alpha type are specified via the
11*c8dee2aaSAndroid Build Coastguard Worker# decode_mode, dst_color_type and dst_alpha_type fields, respectively. The resulting image is then
12*c8dee2aaSAndroid Build Coastguard Worker# drawn into an SkSurface specified via the surface_config field, and is saved as an undeclared
13*c8dee2aaSAndroid Build Coastguard Worker# test output which may be uploaded to Gold. See //tools/testrunners/gm/BazelGMTestRunner.cpp for
14*c8dee2aaSAndroid Build Coastguard Worker# more details.
15*c8dee2aaSAndroid Build Coastguard Worker#
16*c8dee2aaSAndroid Build Coastguard Worker# Some combinations of parameters are excluded because they are mutually incompatible or redundant.
17*c8dee2aaSAndroid Build Coastguard Worker_GRAYSCALE_8888_TESTS = [
18*c8dee2aaSAndroid Build Coastguard Worker    [
19*c8dee2aaSAndroid Build Coastguard Worker        "@skimage//:dm_pngs_gray8_opaque",
20*c8dee2aaSAndroid Build Coastguard Worker        decode_mode,
21*c8dee2aaSAndroid Build Coastguard Worker        dst_color_type,
22*c8dee2aaSAndroid Build Coastguard Worker        "premul",
23*c8dee2aaSAndroid Build Coastguard Worker        "8888",
24*c8dee2aaSAndroid Build Coastguard Worker    ]
25*c8dee2aaSAndroid Build Coastguard Worker    for decode_mode in ["get-all-pixels", "incremental", "zero-init"]
26*c8dee2aaSAndroid Build Coastguard Worker    for dst_color_type in ["force-grayscale", "force-nonnative-premul-color", "get-from-canvas"]
27*c8dee2aaSAndroid Build Coastguard Worker]
28*c8dee2aaSAndroid Build Coastguard Worker_GRAYSCALE_565_TESTS = [
29*c8dee2aaSAndroid Build Coastguard Worker    [
30*c8dee2aaSAndroid Build Coastguard Worker        "@skimage//:dm_pngs_gray8_opaque",
31*c8dee2aaSAndroid Build Coastguard Worker        decode_mode,
32*c8dee2aaSAndroid Build Coastguard Worker        "get-from-canvas",
33*c8dee2aaSAndroid Build Coastguard Worker        "premul",
34*c8dee2aaSAndroid Build Coastguard Worker        "565",
35*c8dee2aaSAndroid Build Coastguard Worker    ]
36*c8dee2aaSAndroid Build Coastguard Worker    for decode_mode in ["get-all-pixels", "incremental", "zero-init"]
37*c8dee2aaSAndroid Build Coastguard Worker]
38*c8dee2aaSAndroid Build Coastguard Worker_COLOR_TRANSLUCENT_TESTS = [
39*c8dee2aaSAndroid Build Coastguard Worker    [
40*c8dee2aaSAndroid Build Coastguard Worker        "@skimage//:dm_pngs_rgba8888_translucent",
41*c8dee2aaSAndroid Build Coastguard Worker        decode_mode,
42*c8dee2aaSAndroid Build Coastguard Worker        dst_color_type,
43*c8dee2aaSAndroid Build Coastguard Worker        dst_alpha_type,
44*c8dee2aaSAndroid Build Coastguard Worker        "8888",
45*c8dee2aaSAndroid Build Coastguard Worker    ]
46*c8dee2aaSAndroid Build Coastguard Worker    for decode_mode in ["get-all-pixels", "incremental", "zero-init"]
47*c8dee2aaSAndroid Build Coastguard Worker    for dst_color_type in ["force-nonnative-premul-color", "get-from-canvas"]
48*c8dee2aaSAndroid Build Coastguard Worker    for dst_alpha_type in ["premul", "unpremul"]
49*c8dee2aaSAndroid Build Coastguard Worker]
50*c8dee2aaSAndroid Build Coastguard Worker_COLOR_OPAQUE_8888_TESTS = [
51*c8dee2aaSAndroid Build Coastguard Worker    [
52*c8dee2aaSAndroid Build Coastguard Worker        "@skimage//:dm_pngs_rgba8888_opaque",
53*c8dee2aaSAndroid Build Coastguard Worker        decode_mode,
54*c8dee2aaSAndroid Build Coastguard Worker        dst_color_type,
55*c8dee2aaSAndroid Build Coastguard Worker        "premul",
56*c8dee2aaSAndroid Build Coastguard Worker        "8888",
57*c8dee2aaSAndroid Build Coastguard Worker    ]
58*c8dee2aaSAndroid Build Coastguard Worker    for decode_mode in ["get-all-pixels", "incremental", "zero-init"]
59*c8dee2aaSAndroid Build Coastguard Worker    for dst_color_type in ["force-nonnative-premul-color", "get-from-canvas"]
60*c8dee2aaSAndroid Build Coastguard Worker]
61*c8dee2aaSAndroid Build Coastguard Worker_COLOR_OPAQUE_565_TESTS = [
62*c8dee2aaSAndroid Build Coastguard Worker    [
63*c8dee2aaSAndroid Build Coastguard Worker        "@skimage//:dm_pngs_rgba8888_opaque",
64*c8dee2aaSAndroid Build Coastguard Worker        decode_mode,
65*c8dee2aaSAndroid Build Coastguard Worker        "get-from-canvas",
66*c8dee2aaSAndroid Build Coastguard Worker        "premul",
67*c8dee2aaSAndroid Build Coastguard Worker        "565",
68*c8dee2aaSAndroid Build Coastguard Worker    ]
69*c8dee2aaSAndroid Build Coastguard Worker    for decode_mode in ["get-all-pixels", "incremental", "zero-init"]
70*c8dee2aaSAndroid Build Coastguard Worker]
71*c8dee2aaSAndroid Build Coastguard Worker_TESTS = (
72*c8dee2aaSAndroid Build Coastguard Worker    _GRAYSCALE_8888_TESTS +
73*c8dee2aaSAndroid Build Coastguard Worker    _GRAYSCALE_565_TESTS +
74*c8dee2aaSAndroid Build Coastguard Worker    _COLOR_TRANSLUCENT_TESTS +
75*c8dee2aaSAndroid Build Coastguard Worker    _COLOR_OPAQUE_8888_TESTS +
76*c8dee2aaSAndroid Build Coastguard Worker    _COLOR_OPAQUE_565_TESTS
77*c8dee2aaSAndroid Build Coastguard Worker)
78*c8dee2aaSAndroid Build Coastguard Worker
79*c8dee2aaSAndroid Build Coastguard Workerdef png_codec_tests(name):
80*c8dee2aaSAndroid Build Coastguard Worker    """Generates various skia_cc_test targets for png_codec.cpp.
81*c8dee2aaSAndroid Build Coastguard Worker
82*c8dee2aaSAndroid Build Coastguard Worker    Args:
83*c8dee2aaSAndroid Build Coastguard Worker        name: The name of the test_suite to generate.
84*c8dee2aaSAndroid Build Coastguard Worker    """
85*c8dee2aaSAndroid Build Coastguard Worker
86*c8dee2aaSAndroid Build Coastguard Worker    all_tests = []
87*c8dee2aaSAndroid Build Coastguard Worker
88*c8dee2aaSAndroid Build Coastguard Worker    for images, decode_mode, dst_color_type, dst_alpha_type, surface_config in _TESTS:
89*c8dee2aaSAndroid Build Coastguard Worker        test_name = "png_codec_%s_%s_%s_%s_%s_test" % (
90*c8dee2aaSAndroid Build Coastguard Worker            images.replace("@skimage//:dm_pngs_", "").replace("_", "-"),
91*c8dee2aaSAndroid Build Coastguard Worker            decode_mode,
92*c8dee2aaSAndroid Build Coastguard Worker            dst_color_type,
93*c8dee2aaSAndroid Build Coastguard Worker            dst_alpha_type,
94*c8dee2aaSAndroid Build Coastguard Worker            surface_config,
95*c8dee2aaSAndroid Build Coastguard Worker        )
96*c8dee2aaSAndroid Build Coastguard Worker        all_tests.append(test_name)
97*c8dee2aaSAndroid Build Coastguard Worker
98*c8dee2aaSAndroid Build Coastguard Worker        skia_cc_test(
99*c8dee2aaSAndroid Build Coastguard Worker            name = test_name,
100*c8dee2aaSAndroid Build Coastguard Worker            size = "large",
101*c8dee2aaSAndroid Build Coastguard Worker            srcs = [
102*c8dee2aaSAndroid Build Coastguard Worker                "png_codec.cpp",
103*c8dee2aaSAndroid Build Coastguard Worker                "//tools/flags:common_flags_legacy",
104*c8dee2aaSAndroid Build Coastguard Worker                "//tools/testrunners/gm:BazelGMTestRunner.cpp",
105*c8dee2aaSAndroid Build Coastguard Worker            ],
106*c8dee2aaSAndroid Build Coastguard Worker            target_compatible_with = ["@platforms//os:linux"],
107*c8dee2aaSAndroid Build Coastguard Worker            args = [
108*c8dee2aaSAndroid Build Coastguard Worker                "--surfaceConfig",
109*c8dee2aaSAndroid Build Coastguard Worker                surface_config,
110*c8dee2aaSAndroid Build Coastguard Worker                "--pngCodecGMImages",
111*c8dee2aaSAndroid Build Coastguard Worker                "external/skimage/dm",
112*c8dee2aaSAndroid Build Coastguard Worker                "--pngCodecDecodeMode",
113*c8dee2aaSAndroid Build Coastguard Worker                decode_mode,
114*c8dee2aaSAndroid Build Coastguard Worker                "--pngCodecDstColorType",
115*c8dee2aaSAndroid Build Coastguard Worker                dst_color_type,
116*c8dee2aaSAndroid Build Coastguard Worker                "--pngCodecDstAlphaType",
117*c8dee2aaSAndroid Build Coastguard Worker                dst_alpha_type,
118*c8dee2aaSAndroid Build Coastguard Worker            ],
119*c8dee2aaSAndroid Build Coastguard Worker            data = [images],
120*c8dee2aaSAndroid Build Coastguard Worker            deps = [
121*c8dee2aaSAndroid Build Coastguard Worker                "//:core",
122*c8dee2aaSAndroid Build Coastguard Worker                "//:png_decode_codec",
123*c8dee2aaSAndroid Build Coastguard Worker                "//gm",
124*c8dee2aaSAndroid Build Coastguard Worker                "//src/core:core_priv",
125*c8dee2aaSAndroid Build Coastguard Worker                "//tools:codec_utils",
126*c8dee2aaSAndroid Build Coastguard Worker                "//tools:hash_and_encode",
127*c8dee2aaSAndroid Build Coastguard Worker                "//tools:tool_utils",
128*c8dee2aaSAndroid Build Coastguard Worker                "//tools/testrunners/common:testrunner",
129*c8dee2aaSAndroid Build Coastguard Worker                "//tools/testrunners/common/compilation_mode_keys",
130*c8dee2aaSAndroid Build Coastguard Worker                "//tools/testrunners/common/surface_manager:raster",
131*c8dee2aaSAndroid Build Coastguard Worker                "//tools/testrunners/gm/vias:simple_vias",
132*c8dee2aaSAndroid Build Coastguard Worker            ],
133*c8dee2aaSAndroid Build Coastguard Worker        )
134*c8dee2aaSAndroid Build Coastguard Worker
135*c8dee2aaSAndroid Build Coastguard Worker    native.test_suite(
136*c8dee2aaSAndroid Build Coastguard Worker        name = name,
137*c8dee2aaSAndroid Build Coastguard Worker        tests = all_tests,
138*c8dee2aaSAndroid Build Coastguard Worker    )
139*c8dee2aaSAndroid Build Coastguard Worker
140*c8dee2aaSAndroid Build Coastguard Worker    # List all generated target names for greppability.
141*c8dee2aaSAndroid Build Coastguard Worker    #
142*c8dee2aaSAndroid Build Coastguard Worker    # Editing this list does not by itself affect which targets are generated. Instead, edit the
143*c8dee2aaSAndroid Build Coastguard Worker    # list comprehensions at the top of this file, try to run a target with Bazel, and update this
144*c8dee2aaSAndroid Build Coastguard Worker    # list as instructed in the "out of sync" error message produced by the below fail() statement.
145*c8dee2aaSAndroid Build Coastguard Worker    greppable_test_list = [
146*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_gray8-opaque_get-all-pixels_force-grayscale_premul_8888_test",
147*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_gray8-opaque_get-all-pixels_force-nonnative-premul-color_premul_8888_test",
148*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_gray8-opaque_get-all-pixels_get-from-canvas_premul_8888_test",
149*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_gray8-opaque_incremental_force-grayscale_premul_8888_test",
150*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_gray8-opaque_incremental_force-nonnative-premul-color_premul_8888_test",
151*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_gray8-opaque_incremental_get-from-canvas_premul_8888_test",
152*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_gray8-opaque_zero-init_force-grayscale_premul_8888_test",
153*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_gray8-opaque_zero-init_force-nonnative-premul-color_premul_8888_test",
154*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_gray8-opaque_zero-init_get-from-canvas_premul_8888_test",
155*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_gray8-opaque_get-all-pixels_get-from-canvas_premul_565_test",
156*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_gray8-opaque_incremental_get-from-canvas_premul_565_test",
157*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_gray8-opaque_zero-init_get-from-canvas_premul_565_test",
158*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_rgba8888-translucent_get-all-pixels_force-nonnative-premul-color_premul_8888_test",
159*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_rgba8888-translucent_get-all-pixels_force-nonnative-premul-color_unpremul_8888_test",
160*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_rgba8888-translucent_get-all-pixels_get-from-canvas_premul_8888_test",
161*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_rgba8888-translucent_get-all-pixels_get-from-canvas_unpremul_8888_test",
162*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_rgba8888-translucent_incremental_force-nonnative-premul-color_premul_8888_test",
163*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_rgba8888-translucent_incremental_force-nonnative-premul-color_unpremul_8888_test",
164*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_rgba8888-translucent_incremental_get-from-canvas_premul_8888_test",
165*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_rgba8888-translucent_incremental_get-from-canvas_unpremul_8888_test",
166*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_rgba8888-translucent_zero-init_force-nonnative-premul-color_premul_8888_test",
167*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_rgba8888-translucent_zero-init_force-nonnative-premul-color_unpremul_8888_test",
168*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_rgba8888-translucent_zero-init_get-from-canvas_premul_8888_test",
169*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_rgba8888-translucent_zero-init_get-from-canvas_unpremul_8888_test",
170*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_rgba8888-opaque_get-all-pixels_force-nonnative-premul-color_premul_8888_test",
171*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_rgba8888-opaque_get-all-pixels_get-from-canvas_premul_8888_test",
172*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_rgba8888-opaque_incremental_force-nonnative-premul-color_premul_8888_test",
173*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_rgba8888-opaque_incremental_get-from-canvas_premul_8888_test",
174*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_rgba8888-opaque_zero-init_force-nonnative-premul-color_premul_8888_test",
175*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_rgba8888-opaque_zero-init_get-from-canvas_premul_8888_test",
176*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_rgba8888-opaque_get-all-pixels_get-from-canvas_premul_565_test",
177*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_rgba8888-opaque_incremental_get-from-canvas_premul_565_test",
178*c8dee2aaSAndroid Build Coastguard Worker        "png_codec_rgba8888-opaque_zero-init_get-from-canvas_premul_565_test",
179*c8dee2aaSAndroid Build Coastguard Worker    ]
180*c8dee2aaSAndroid Build Coastguard Worker    if greppable_test_list != all_tests:
181*c8dee2aaSAndroid Build Coastguard Worker        msg = [
182*c8dee2aaSAndroid Build Coastguard Worker            "Variable greppable_test_list is out of sync. Please update it as follows:",
183*c8dee2aaSAndroid Build Coastguard Worker            "",
184*c8dee2aaSAndroid Build Coastguard Worker            "    greppable_test_list = [",
185*c8dee2aaSAndroid Build Coastguard Worker        ] + [
186*c8dee2aaSAndroid Build Coastguard Worker            "        \"" + test + "\","
187*c8dee2aaSAndroid Build Coastguard Worker            for test in all_tests
188*c8dee2aaSAndroid Build Coastguard Worker        ] + [
189*c8dee2aaSAndroid Build Coastguard Worker            "    ]",
190*c8dee2aaSAndroid Build Coastguard Worker        ]
191*c8dee2aaSAndroid Build Coastguard Worker        fail("\n".join(msg))
192