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