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