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